我使用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