0

我想知道这是如何工作的,如果我创建了一个 Car 对象,并且有一个名为 toParts 的关系(它包含这辆车的所有汽车零件),然后我创建了另一辆车,它会复制 toParts 集吗?

添加到核心数据:汽车 a = (toParts = 车轮、轮胎、座椅)

添加到核心数据:汽车 b =(toParts = 车轮、轮胎、座椅)

CarParts.h(具有名称属性)

我现在会有 Carparts = wheel , wheel, Tire, Tyre, seat, seat 如果是这样我需要复制吗?有没有办法将所有未来的汽车指向同一个车轮实例(而不是拥有 1000 个)?

提前致谢

编辑添加代码:

这是我现在用来获取结果的代码,我正在寻找重复项的 ris 并获得最终的汽车数组而不是 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 不关心你是否创建了重复的条目。不会自动检测具有相同属性值的两个对象——因为您可能想要这些。如果您创建两个相同wheel的条目,您将获得其中两个。

需要它们吗?只有你能回答这个问题。这取决于您的应用程序的工作方式。有没有wheel可能修改这两个对象以使它们没有区别的情况?让多个汽车对象引用同一个车轮是否有意义?答案取决于您的应用程序做什么以及它如何使用这些数据。我不知道你的应用程序是如何工作的,但我的直觉是,如果wheel实际上是指一种车轮类型——例如“Bridgestone Blizzak DM-V1 - 245/60R18 105R BSW”,那么允许不止一辆汽车是有意义的用它。如果它指的是车轮的特定实例——“这辆特定汽车的右后轮胎”,那么它就没有意义了。但只有你可以肯定地说。

如果您不需要它们,那么当然,您可以安排多辆汽车​​指向同一个车轮。将车轮与汽车的关系设为一对多的关系,然后将一个车轮关联到任意数量的汽车。这并不意味着 Core Data 将开始自动检测重复的车轮——它永远不会那样做。但这确实意味着,如果您保留相同的车轮对象,您可以将它用于不止一辆汽车。

于 2013-01-08T18:11:16.637 回答