2012-04-19 85 views
5

我想在覈心數據對象中存檔/取消存檔NSManagedObjectIDs,這樣下次我的應用程序啓動時,我可以檢索這些ID並使用它們來獲取特定的對象。在覈心數據中存儲NSURL的正確方法是什麼?

我嘗試「存檔」的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文檔似乎暗示它是否爲空使用默認轉換器。

我在做什麼錯?

+0

這與nsurl有什麼關係? – Chet 2014-03-23 04:59:55

回答

0

好吧......它已經連續14小時的編碼..我..一..誒白癡:

我忘了訪問屬性的ArchivedID對象。那就是:

NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[defaultConfiguration.archiveID anyObject]]; 

應該

NSManagedObjectID* ID = [managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[[defaultConfiguration.archiveID anyObject] idURI]]; 
+0

這也起作用:) – kevboh 2012-04-19 15:16:20

1

您可以在不存儲URL的情況下解決此問題。考慮向你的模型添加一個布爾標誌並將你希望檢索的對象標記爲true,然後在你的應用下次啓動時獲取標記的對象。

但是,您可以嘗試獲取URL的字符串版本-absoluteString並存儲它。

+0

如果你採取這種方法,一定要檢查布爾屬性上的「索引」框,因爲你將基於該標誌進行提取。 – ma11hew28 2012-04-19 15:14:42

-1

我喜歡什麼@kevboh建議。您也可以考慮將的objectID存儲在NSUserDefaults中。例如:

[[NSUserDefaults standardUserDefaults] setObject:featuredNSManagedObjectIDArray 
              forKey:@"FeaturedNSManagedObjectIDs"]; 
+0

kevboh的方式工作,但增加了額外的間接水平。我做得很好,只是我有一個錯字。 – SaldaVonSchwartz 2012-04-20 15:00:53

0

嗯。似乎有一個更簡單的方法來與CoreData做到這一點。請記住,CoreData是一個對象圖。善於跟蹤關係。

爲什麼不在CoreData中有一個實體與您喜歡的對象保持一對多的關係?然後,你可以在對象集合中插入/刪除/搜索/迭代/任何東西。

+0

存檔的URL方法允許通過JSON等傳遞ID。如果我保留一對多的對象,我可能只需要獲取它們(它們在一開始就是一對一的)。整個問題的關鍵是能夠及時檢索它們,而不必創建一個完整的獲取,謂詞, – SaldaVonSchwartz 2012-04-20 15:03:45

相關問題