![](/img/trans.png)
[英]iOS Today Extension NSUserDefaults Sharing Data with Containing App using Callbacks
[英]How to share data with containing app using NSUserDefaults ? - Today Extension Widget
我正在嘗試創建一個Today Extension Widget ,它在窗口小部件中顯示存儲的數據。
這就是我所做的;
現在我遇到了障礙,我不確定檢索和顯示簡單的獲取數據數組的最佳方法。
Swift教程非常少,他們通常不使用核心數據。
在主應用程序項目中,我獲取數組。
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let request = NSFetchRequest(entityName: "Objects")
do {
try
self.objectsArray = moc.executeFetchRequest(request) as! [Objects]
} catch {
}
如何使用NSUserDefaults
存儲對象數組,然后在今天的小部件擴展中使用? 或者甚至是一串字符串值。
1)獲取數據庫的URL
var containerPath: String = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier(YOUR_SECURITY_APP_GROUP).path
var sqlitePath: String = "(containerPath)/("database.sqlite")"
2)像在父應用程序中一樣創建持久性存儲協調器。
3)為您的托管對象上下文設置它
context = NSManagedObjectContext()
context.persistentStoreCoordinator = coordinator
4)像在父應用程序中一樣檢索對象
let moc = context
let request = NSFetchRequest(entityName: "Objects")
do {
try self.objectsArray = moc.executeFetchRequest(request) as! [Objects]
} catch {}
如果您正確設置應用程序組並為應用程序和擴展程序添加了相同的組,則可以使用NSUserDefaults。 例如,要從應用程序中編寫內容,您需要:
static func setSharedScoreNumber(score: Int) {
let defaults = UserDefaults(suiteName: "group.bubblewrapSharedDefaults") // this is the name of the group we added in "App Groups"
defaults?.set(String(score), forKey: "score")
defaults?.synchronize()
}
並閱讀今日推廣:
private func getScore() -> String {
let defaults = UserDefaults(suiteName: "group.bubblewrapSharedDefaults")
defaults?.synchronize()
return String(describing: defaults!.object(forKey: "score") ?? "0")
}
這是完整的指南如何做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.