核心数据从多个关系中删除单个记录

时间:2016-06-13 12:19:57

标签: objective-c core-data

我创建了4个实体。 用户,手机,电子邮件,地址。 用户与移动设备有许多关系(名称为数字)。 我有以上所有的子类。如何从特定用户删除单个手机号码?如何更新来自特定用户的单个手机号码?谓词用于什么?

代码在这里:

    NSManagedObjectContext *context = [self managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:NSStringFromClass([User class])]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY numbers.number == %@",self.textField.text]; 
[request setPredicate:predicate];
 NSError *error = nil;
 NSArray *array = [context executeFetchRequest:request error:&error]; Mobile *objMobile;
 User *objUser; 
objUser = [array objectAtIndex:0];

    for (User *obj in [objUser.numbers valueForKey:@"number"]) { 

NSLog(@"%@",obj);
 NSString *str1 = [NSString stringWithFormat:@"%@",obj];
 NSString *str2 = [NSString stringWithFormat:@"%@",self.textDelete.text];

 if ([str1 isEqualToString:str2] ) { 
[objUser removeNumbersObject:objMobile]; } 
}
 NSLog(@"%@",[objUser.numbers valueForKey:@"number"]); self.textAddUserDetail.text = @"";
 if (![context save:&error]) { }

2 个答案:

答案 0 :(得分:0)

基本上,不要根据用户和关系进行搜索。而是直接搜索该号码,然后将其删除或编辑:

NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:NSStringFromClass([Number class])]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"number == %@", self.textField.text]; 

然后你也不需要循环并额外考虑要做什么。

答案 1 :(得分:0)

使用" Magical Records" Library.it使用键值编码不需要维护Relationships.it将自动从所有实体获取唯一键