将NSURL存储在Core Data中的正确方法是什么?

Sal*_*rtz 5 cocoa core-data foundation ios nsvaluetransformer

我正在尝试在Core Data对象中归档/取消归档NSManagedObjectID,以便下次我的应用程序启动时,我可以检索这些ID并使用它们来获取特定对象.

我尝试像这样"存档"ID:

//defaultConfiguration is an NSManagedObject defined elsewhere and it works just fine...    
// and newObject is also properly initialized, bound to a context,etc...

ArchivedID* newID = [NSEntityDescription insertNewObjectForEntityForName:@"ArchivedID" inManagedObjectContext:managedObjectContext];
[self.defaultConfiguration addArchiveIDObject:newID];
newID.idURI = [[newObject objectID] URIRepresentation];
[managedObjectContext save:&error]; 
Run Code Online (Sandbox Code Playgroud)

然后像这样取消归档(我只是去[anyObject]因为我正在测试,此时只有一个):

NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[defaultConfiguration.archiveID anyObject]];
Run Code Online (Sandbox Code Playgroud)

但是当我尝试像上面那样获取URL时,我得到以下异常:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ArchivedID relativeString]: unrecognized selector sent to instance 0x7f59f20'
Run Code Online (Sandbox Code Playgroud)

实体中的属性通过Xcode设置为"可转换",我将Xcode中的变换器值字段留空,因为Core Data文档似乎暗示如果为空则使用默认变换器.

我究竟做错了什么?

Sal*_*rtz 0

好吧...已经连续 14 小时编码了..我是一个..呃..白痴:

我忘记访问 ArchivedID 对象中的属性。那是:

NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[defaultConfiguration.archiveID anyObject]];
Run Code Online (Sandbox Code Playgroud)

应该

NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[[defaultConfiguration.archiveID anyObject] idURI]];
Run Code Online (Sandbox Code Playgroud)