为了避免成为XY问题,这里提供一些背景信息:
我的应用程序允许用户创建和保存许多设置,有点像Xcode的字体和颜色选择器。 这是因为用户可以设置很多东西。只需点击已保存的设置,而不是再次设置所有这些内容,会更容易一些。
我使用Core Data存储用户保存的设置。用户创建的每个设置都是一个NSManagedObject子类的实例。现在,我需要持久地存储所选的设置,以便当应用程序重新打开时,用户将选择与之前相同的设置。
我的第一个想法是将NSManagedObject子类实例存储在NSUserDefaults中。但根据文档,除非将其转换为NSData,否则无法存储它:
默认对象必须是属性列表,即NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary的实例(或对于集合,这些实例的组合)。
然后我尝试存储NSManagedObject子类实例的objectID。我看到有一个URIRepresentation()方法返回一个NSURL。所以我认为这会起作用:
我的应用程序允许用户创建和保存许多设置,有点像Xcode的字体和颜色选择器。 这是因为用户可以设置很多东西。只需点击已保存的设置,而不是再次设置所有这些内容,会更容易一些。
我使用Core Data存储用户保存的设置。用户创建的每个设置都是一个NSManagedObject子类的实例。现在,我需要持久地存储所选的设置,以便当应用程序重新打开时,用户将选择与之前相同的设置。
我的第一个想法是将NSManagedObject子类实例存储在NSUserDefaults中。但根据文档,除非将其转换为NSData,否则无法存储它:
默认对象必须是属性列表,即NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary的实例(或对于集合,这些实例的组合)。
然后我尝试存储NSManagedObject子类实例的objectID。我看到有一个URIRepresentation()方法返回一个NSURL。所以我认为这会起作用:
NSData(contentsOfURL: selectedOption!.objectID.URIRepresentation())
但是初始化程序以某种方式失败了。
现在我意识到这是一个愚蠢的想法,因为即使我可以将其转换为NSData
,我也无法将NSData
转换回NSManagedObjectID
!
根据这个问题,OP似乎能够存储对象ID:
我将所选主题的对象ID存储在NSUserDefaults中,以便当应用程序重新启动时,所选的主题仍然存在。
我该怎么做?
managedObjectIDForURIRepresentation
获取NSObjectId,然后使用objectWithID
获取NSManagedObject。 - Paulw11managedObjectIDForURIRrepresentation
提供 URL 并提供返回的对象 ID 到objectWithID
,您可以在托管对象上下文中操作对象。 - Paulw11