0

Car オブジェクトを作成し、toParts というリレーションシップ (この車のすべての車のパーツのセットを持っています) があり、別の車を作成すると、toParts セットが複製されますか?

コア データに追加: car a = (toParts = ホイール、タイヤ、シート)

コア データに追加: car b = (toParts = ホイール、タイヤ、シート)

CarParts.h (name 属性あり)

Carparts = wheel、wheel、tyre、tyre、seat、seat を持っていますか? その場合、複製が必要ですか? 将来のすべての車を同じホイール インスタンスにポイントする方法はありますか (1000 台ではなく)。

前もって感謝します

編集された追加コード:

これは、現在結果を取得するために使用しているコードです。重複のリスクを取得し、carParts ではない車の最後の配列を取得しようとしていました (しかし、carPart で検索したい)

-(NSArray*) loadCarsFromCoreDataUsingCarParts:(NSMutableArray*)inputCarParts{
    NSLog(@"carParts =%@",inputCarParts);
    NSFetchRequest *fetchRequest =[[NSFetchRequest alloc]init];
    //To find the Cars we are using the carParts
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CarPart" inManagedObjectContext:[self managedObjectContext]];

    //sets up fetch request details
    [fetchRequest setEntity:entity];
    //3 here signifies it is an ingredient search
    [fetchRequest setPredicate:[self parseSearchObjectsIntoAPredicate:inputCarParts:3]];
    //don’t understand these results so comment out
    //[fetchRequest setReturnsDistinctResults:YES];
    //[fetchRequest setResultType:NSDictionaryResultType];
    //attempt to preload the nsset containing the cars (just one each time for some reason
[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"ToCar", nil]];

    //Perform fetch
    NSError *error;
    NSArray *records = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];

//I have to do this to get the results finally as cars NOT individual instances of car parts
    return [self convertToCars:records];
}


-(NSArray*)convertToCars:(NSArray*)records{
    NSMutableArray *manipulator =[NSMutableArray arrayWithArray:records];
    NSMutableArray *convertedArray =[[NSMutableArray alloc]init];

    for (int i=0; i<[manipulator count]; i++) {
        //regular way
        CarPart *partFromManipulator=(CarPart *)[manipulator objectAtIndex:i];
        [convertedArray addObjectsFromArray:[[ partFromManipulator toCar]allObjects]];
    }

    NSLog(@"Results from core data = %i",[convertedArray count]);
    return [NSArray arrayWithArray:convertedArray];
}
4

1 に答える 1

1

重複したエントリを作成しても、Core Data は気にしません。同一の属性値を持つ 2 つのオブジェクトを自動的に検出することはできません。必要になる場合があるためです。同一wheelのエントリを 2 つ作成すると、そのうちの 2 つが取得されます。

それらが必要ですか?それに答えられるのはあなただけです。アプリの動作方法によって異なります。wheelこれらの 2 つのオブジェクトが変更されて、違いがないようにする状況はありますか? 同じホイールを参照する複数の車のオブジェクトを持つことは理にかなっていますか? 答えは、アプリの機能と、このデータをどのように使用するかによって異なります。あなたのアプリがどのように機能するかはわかりませんが、私の直感では、wheel実際にホイール タイプを参照している場合、たとえば「Bridgestone Blizzak DM-V1 - 245/60R18 105R BSW」など、複数の車を許可するのは理にかなっています。これを使って。ホイールの特定のインスタンス (「この特定の車の右リア タイヤ」 ) を参照している場合、意味がありません。しかし、確実に言えるのはあなただけです。

それらが必要ない場合は、確かに、複数の車が同じホイールを指すように手配できます. 車輪と車の関係を対多関係にして、1 つの車輪を好きなだけ関連付けます。これは、Core Data が自動的に重複ホイールの検出を開始するという意味ではありません。ただし、同じホイール オブジェクトを保持すれば、複数の車に使用できるということです。

于 2013-01-08T18:11:16.637 に答える