使用Core Data插入数据

时间:2011-02-21 09:43:44

标签: iphone core-data

我正在使用以下编写的代码来使用核心数据技术插入批量数据... 请告诉我这是正确的方法做同样的...我在循环中采取上下文和实体对象...如果在外面只采取数组的最后一个元素插入...请告知...

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]);
}

2 个答案:

答案 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