簡體   English   中英

如何使用NSUserDefaults與包含應用程序共享數據? - 今日Extension Widget

[英]How to share data with containing app using NSUserDefaults ? - Today Extension Widget

我正在嘗試創建一個Today Extension Widget ,它在窗口小部件中顯示存儲的數據。

這就是我所做的;

  • 添加了New Today Widget Target
  • 為小部件設置UIViewController
  • 為應用和擴展程序啟用應用組

現在我遇到了障礙,我不確定檢索和顯示簡單的獲取數據數組的最佳方法。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM