问题加载子实体mangedobject在coredata

我认为这是错误的,它只加载一个汽车部分:这种方法需要两个arrays之一与汽车的名字,一个零件,创build一个新的汽车,并添加汽车零件,然后将汽车保存到核心数据。 (目前不这样工作)

for (int i=0; i<[massiveArray count]; i++) { //create a new car and part Car*newCar =(Car*)[NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:[self managedObjectContext]]; CarPart *part =[NSEntityDescription insertNewObjectForEntityForName:@"CarPart" inManagedObjectContext:[self managedObjectContext]]; //set car title to string title in array of titles [newCar setValue:[massiveArray objectAtIndex:i] forKey:@"name"]; //go through car parts array and add all new parts for that specific car for (int i=0; i<[partNamesArray count]; i++) { [part setValue:[partNamesArray objectAtIndex:i] forKey:@"name"]; [newCar addToCarPartObject:part]; //save each part??? I think this is wrong [self.managedObjectContext save:nil]; } //Save new car [self.managedObjectContext save:nil]; } 

我知道这里发生了什么事

您需要为每个零件的核心数据插入新的零件对象。 就像现在一样,你只是制作一个零件对象,然后在for循环中覆盖它。 你的代码应该看起来类似于这个…

 for (int i=0; i<[massiveArray count]; i++) { //create a new car and part Car *newCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:[self managedObjectContext]]; //set car title to string title in array of titles [newCar setValue:[massiveArray objectAtIndex:i] forKey:@"name"]; //go through car parts array and add all new parts for that specific car for (int i=0; i<[partNamesArray count]; i++) { CarPart *part =[NSEntityDescription insertNewObjectForEntityForName:@"CarPart" inManagedObjectContext:[self managedObjectContext]]; [part setValue:[partNamesArray objectAtIndex:i] forKey:@"name"]; [newCar addToCarPartObject:part]; } } //Save the entire context (all pending changes to cars and their parts) [self.managedObjectContext save:nil]; 

正如我在上面的评论中所说,我build议将保存移到循环之外。

另一个更容易阅读代码的build议。 当枚举一个简单的循环中的数组尝试像…

 for (NSString *carTitle in massiveArray) { /* Now do your stuff in here... 'carTitle' will be different during * each pass of the loop. No need to increment an i variable or grab * the object from the array on each pass. */ }