0

これは間違っていると思います。1つの車のパーツのみをロードします。このメソッドは、車の名前とパーツの2つの配列を取り、新しい車を作成し、それに車のパーツを追加して、車をコアデータに保存します。(現在、このようには機能しません)

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

1 に答える 1

2

私はここで何が起こっているのか知っています。

各パーツのコアデータに新しいパーツオブジェクトを挿入する必要があります。現在のように、1つのパーツオブジェクトを作成し、それを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];

上記のコメントで述べたように、保存をループの外側に移動することをお勧めします。

コードを読みやすくするためのもう1つの提案。単純なforループで配列を列挙するときは、次のようにしてみてください...

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. 
     */
}
于 2013-01-02T19:25:08.487 に答える