我想知道它是如何工作的,如果我创建一个Car对象,并且有一个名为toParts的关系(它有一组这辆车的所有汽车零件),然后我创建另一辆车,它会复制toParts设置?
添加核心数据: 汽车a =(toParts =车轮,轮胎,座椅)
添加核心数据: 汽车b =(toParts =车轮,轮胎,座椅)
CarParts.h(具有名称属性)
我现在有Carparts =车轮,车轮,轮胎,轮胎,座椅,座椅 如果是这样,我需要重复吗?有没有办法将所有未来的汽车指向相同的车轮实例(而不是拥有1000个)?提前致谢
编辑后添加的代码:
这是我现在用于获取结果的代码,我希望得到重复的结果并得到一个汽车的最终数组而不是carPart(但我想通过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];
}
答案 0 :(得分:1)
核心数据并不关心您是否创建了重复的条目。没有自动检测具有相同属性值的两个对象 - 因为您可能需要这些属性。如果您创建两个相同的wheel
条目,则会获得其中两个条目。
你需要吗?只有你能回答这个问题。这取决于您的应用程序的工作方式。是否存在这两个wheel
对象可能被修改以使它们没有不同的情况?让多个汽车对象引用同一个轮子是否有意义?答案取决于您的应用程序的功能以及它如何使用此数据。我不知道您的应用程序是如何工作的,但我的直觉是,如果wheel
实际上是指轮子类型 - 例如“普利司通Blizzak DM-V1 - 245 / 60R18 105R BSW”,那么允许不止一辆车使用它是有道理的。如果它涉及车轮的特定实例 - “这辆特定车上的右后轮胎”,那么它就没有意义了。但只有你可以肯定地说。
如果您不需要它们,那么您可以安排多辆车指向同一个车轮。将车轮关系与汽车建立多对多的关系,然后将一个车轮与您喜欢的车辆相关联。这并不意味着核心数据将开始自动检测重复的轮子 - 它永远不会这样做。但它确实意味着如果你保持相同的车轮对象,你可以将它用于多辆车。