Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 保存到当前扩展中的特定核心数据对象_Swift_Core Data_Swift2 - Fatal编程技术网

Swift 保存到当前扩展中的特定核心数据对象

Swift 保存到当前扩展中的特定核心数据对象,swift,core-data,swift2,Swift,Core Data,Swift2,处理iOS项目的一部分,该部分需要引用用户在主应用程序中选择的特定对象,该对象通过一个切换开关设置,该开关激活要在Today Extension中使用的指定对象,以记录用户在Today Extension中创建的简单对象。我不确定如何具体地做这件事。我曾考虑使用NSUSerDefaults作为指定该对象的go-to方法,但这对我来说是全新的。以前有人在这里走过这条路吗?有人知道如何引用要在Today扩展中存储到的特定对象吗?您可以使用objectID属性(NSManagedObjectID的实例

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

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

要保存引用,请将对象的ID作为URI获取:

let objectIDURI = newManagedObject.objectID.URIRepresentation()
然后转换到
NSData
并保存:

let objectIDURIData = NSKeyedArchiver.archivedDataWithRootObject(objectIDURI)
NSUserDefaults.standardUserDefaults().setObject(objectIDURIData, forKey: "savedID")
要取回对象,请加载
NSData
,并将其转换回
NSURL
(以下内容已简化,您必须正确处理选项):

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

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

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

有人知道这方面的任何线索吗?
let savedObjectID = context.persistentStoreCoordinator?.managedObjectIDForURIRepresentation(savedObjectIDURI!)
let savedObject = context.objectWithID(savedObjectID!)