我使用NSOperation
子類,並將其保存這樣的導入大型組數據:管理對象上下文保存管理對象的唯一的最後一個記錄循環
- (void)main
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSRunLoopCommonModes];
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:[self persistentStoreCoordinator]];
[moc setUndoManager:nil]; //to make the import more effecient
NSError *error;
for (NSManagedObject *taskInfo in self.tasks) { //self.tasks are the xml returned from a web service
Task *taskDB = [NSEntityDescription insertNewObjectForEntityForName:@"Task"inManagedObjectContext:moc];
taskDB.taskID = [taskInfo valueForKey:@"TaskID"];
taskDB.taskAssignedDate = [taskInfo valueForKey:@"TaskAssignDate"];
taskDB.corporate = [self getCorporate:moc :[[taskInfo valueForKey:@"FacilityInfo"] valueForKey:@"ID"] ];
taskDB.dateTime = [[NSDate date]retain];
taskDB.requestNumber = [taskInfo valueForKey:@"RequestNumber"];
... //there are a lot of other properties for the task table
} //for
[moc save:&error];
[moc reset];
[pool drain], pool = nil;
}
但managedObjectContext
僅保存最後一個記錄的循環和不會保存所有記錄,但是,如果我將保存代碼放入循環中,則managedObjectContext
將按原樣保存所有記錄。我也嘗試通過在循環中設置一個計數器以在(10)個記錄之後進行保存來完成一些記錄後的保存,但是同樣的問題發生,每10次循環運行後moc
保存一條記錄。我怎麼解決這個問題 ?我希望moc
立即保存所有記錄或每10個循環運行一次。
非常感謝。
你爲什麼要在你的'NSManagedObjectContext'中調用reset?這將重置上下文到它的基本狀態。 – rckoenes 2012-07-17 10:25:26
,因爲我在這個類的另一個地方使用它(在主要方法中) – JAHelia 2012-07-17 10:26:46
你合併了兩個ObjectContext嗎? – rckoenes 2012-07-17 10:30:53