我正在通過核心數據開發一個應用程序,我需要在後臺線程中執行一些計算來創建基於特定NSManagedObject
的xml文件。在後臺線程中恢復NSManagedObject關係
以下文檔中,我設置了NSOperation
子類。這個類有類似下面的屬性:
@property (nonatomic, retain) NSArray* objectIDs;
其中objectIDs
是管理對象id(的NSManagedObjectID
型)的陣列。根據文檔,這是必需的:NSManagedObject
不是線程安全的。
內main
NSOperation
的子類,我做了以下內容:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSManagedObjectContext *exportContext = [[NSManagedObjectContext alloc] init];
[exportContext setPersistentStoreCoordinator:[self persistentStoreCoordinator]];
for (NSManagedObjectID* objectID in self.orderObjectIDs) {
NSError* error = nil;
Order* order = (Order*)[exportContext existingObjectWithID:objectID error:&error];
// order.someRelationship is fault here...
// Create XML file here...
}
[exportContext reset];
[exportContext release], exportContext = nil;
[[NSNotificationCenter defaultCenter] postNotificationName:kRegisterComplete object:self];
[pool drain];
pool = nil;
裏面的for
環路我取使用NSManagedObjectContext
類existingObjectWithID:error
方法合適的對象,因爲
不像objectWithID :,這個方法永遠不會返回一個錯誤。
該方法有效。我能夠檢索檢索到的對象的屬性。唯一的問題是關係被認爲是錯誤。
說了這個,我有兩個問題。
首先,這是在後臺線程中使用fecth NSManagedObject
的正確方法嗎? 那麼,如何獲取for
循環中每個獲取對象的關係?我是否必須創建NSFetchedRequest
以基於通過ID獲取的特定對象獲取關係對象?
預先感謝您。
+1您的建議。你是說我可以使用* setRelationshipKeyPathsForPrefetching創建一個* NSFetchRequest *和完美關係:*?我是Core Data的新成員,我不清楚何時會出現錯誤。先謝謝你。 – 2012-04-01 10:26:38
是的,您可以創建獲取請求並傳遞所需關係關鍵路徑的NSArray,即[NSArray arrayWithObject:@「someRelationship」]。這會導致錯誤在發生時被執行,從而消除額外的I/O。 – ImHuntingWabbits 2012-04-02 04:26:24