swift - 保存到 Today Extension 中的特定核心数据对象

标签 swift core-data swift2

正在处理我的 iOS 项目的一部分,该部分需要引用用户在主应用程序中选择的特定对象,该对象通过切换开关进行设置,该切换开关激活要在 Today 扩展中使用的指定对象来记录简单对象由用户在 Today 扩展中创建。我不确定如何具体去做这件事。我考虑过使用 NSUSerDefaults 作为指定该对象的 go to 方法,但这对我来说是全新的。以前有人走过这条路吗?有谁知道如何在 Today 扩展中引用您想要存储的特定对象?

最佳答案

您可以使用 objectID 属性(NSManagedObjectID 的实例)保存对特定托管对象的引用,该属性可以转换为 URI。然后可以将 URI 转换为 NSData,您可以将其保存在用户默认值中。

要保存引用,请获取 URI 形式的对象 ID:

let objectIDURI = newManagedObject.objectID.URIRepresentation()

然后转换为NSData并保存:

let objectIDURIData = NSKeyedArchiver.archivedDataWithRootObject(objectIDURI)
NSUserDefaults.standardUserDefaults().setObject(objectIDURIData, forKey: "savedID")

要取回对象,请加载 NSData 并转换回 NSURL (以下内容已简化,您必须正确处理选项):

let savedObjectIDURIData = NSUserDefaults.standardUserDefaults().objectForKey("savedID") as? NSData
let savedObjectIDURI = NSKeyedUnarchiver.unarchiveObjectWithData(savedObjectIDURIData!) as? NSURL

然后将 ID 转换回 NSManagedObjectID 并获取托管对象:

let savedObjectID = context.persistentStoreCoordinator?.managedObjectIDForURIRepresentation(savedObjectIDURI!)
let savedObject = context.objectWithID(savedObjectID!)

此时savedObject就是上面保存的托管对象。

关于swift - 保存到 Today Extension 中的特定核心数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32886197/

相关文章:

swift - .withUnsafePointerToElements() 是否可以防止 Swift 数组过早释放?

ios - Google map 集成 iOS 1.9.0 问题

cocoa - 如何取消链接并删除 CoreData 中的相关对象

ios - Swift 中的 init 最佳实践是什么?

swift - 在 Realm Swift 中截断表

iphone - 我应该单独制作 UIViewController 只是因为单行布局不同

swift - 单击 UITableView 时没有任何反应(尝试在 View 之间发送数据)

ios - swift 2 中的 toInt() 函数

ios - '初始化()' is deprecated: init() will be removed in Swift 3. Use ` 零`

php - 在 NSUserDefaults 中存储 swiftyJSON 返回的数据时出现问题...相同的数据源