[英]what's the correct way to store an NSURL in Core Data?
我正在嘗試在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];
然后像這樣取消歸檔(我只是去[anyObject]因為我正在測試,此時只有一個):
NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[defaultConfiguration.archiveID anyObject]];
但是當我嘗試像上面那樣獲取URL時,我得到以下異常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ArchivedID relativeString]: unrecognized selector sent to instance 0x7f59f20'
實體中的屬性通過Xcode設置為“可轉換”,我將Xcode中的變換器值字段留空,因為Core Data文檔似乎暗示如果為空則使用默認變換器。
我究竟做錯了什么?
您可以在不存儲URL的情況下解決此問題。 考慮在模型中添加一個布爾標志,並將要檢索的對象標記為true,然后在下次啟動應用程序時獲取標記對象。
但是,您可以嘗試使用-absoluteString
獲取URL的字符串版本並存儲它。
好的...已經14小時直接編碼..我是......呃..白痴:
我忘了訪問ArchivedID對象中的屬性。 那是:
NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[defaultConfiguration.archiveID anyObject]];
應該
NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[[defaultConfiguration.archiveID anyObject] idURI]];
嗯。 看起來有一種更簡單的方法來使用CoreData。 請記住,CoreData是一個對象圖。 它擅長跟蹤人際關系。
為什么不在CoreData中擁有一個與您喜歡的對象保持一對多關系的實體? 然后,您可以在對象集合上插入/刪除/搜索/迭代/任何內容。
我喜歡@kevboh的建議。 你也可以考慮存儲objectID
的固有的S NSManagedObject
S IN NSUserDefaults
。 例如:
[[NSUserDefaults standardUserDefaults] setObject:featuredNSManagedObjectIDArray
forKey:@"FeaturedNSManagedObjectIDs"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.