我正在使用以下编写的代码来使用核心数据技术插入批量数据... 请告诉我这是正确的方法做同样的...我在循环中采取上下文和实体对象...如果在外面只采取数组的最后一个元素插入...请告知...
DataGetSet *objDataGetSet=nil;
NSManagedObjectContext *context=nil;
for(int i=0;i<[arrTemp count];i++)
{
context = [obj_delegate managedObjectContext];
NSManagedObject *propertyInfo = [NSEntityDescription
insertNewObjectForEntityForName:@"Property"
inManagedObjectContext:context];
objDataGetSet=[arrTemp objectAtIndex:i];
[propertyInfo setValue:[objDataGetSet code] forKey:@"Code"];
[propertyInfo setValue:[objDataGetSet location] forKey:@"Location"];
[propertyInfo setValue:[objDataGetSet ownershipType] forKey:@"OwnershipType"];
[propertyInfo setValue:[objDataGetSet price] forKey:@"Price"];
[propertyInfo setValue:[objDataGetSet propertyType] forKey:@"PropertyType"];
[propertyInfo setValue:[objDataGetSet size] forKey:@"Size"];
}
NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
答案 0 :(得分:0)
您不需要在循环内部使用managedObjectContext,您可以将其带到外部。 但无论如何,即使你按照你的方式做,它应该确切地插入[arrTemp count]实体,可能是你在arrTemp数组中的问题?
你确定,你正确检查插入对象的数量?
答案 1 :(得分:0)
是的,那是正确的。但它可能会更好:
首先,从appDelegate获取manageObjectContext并不是一件好事。您可以从AppDelegate的方法手动将它传递给您的rooViewController类,例如:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ( !managedObjectContext_ )
{
[self createManagedObjectContext]; // you should write this method(create and insert your enities)
}
self.yourRootViewControllerClass.managedObjectContext_ = self.managedObjectContext;
self.window.rootViewController = self.yourRootViewControllerClass;
[self.window makeKeyAndVisible];
return YES;
}
然后(如果你有子ViewControllers)你必须以类似于AppDelegate的方式从rootViewController类传递managedObjectContext。
还有一件事是您可以创建一个managedObject子类,然后您将能够以更简单的方式获取和设置属性(不是[propertyInfo setValue:[objDataGetSet code] forKey:@"Code"]
而只是propertyInfo.Code = [objDataGetSet code]
您可以阅读有关如何清楚地执行此操作here。