簡體   English   中英

將NSURL存儲在Core Data中的正確方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM