如何在CoreData中匹配NSSet的对象值?

时间:2016-12-29 04:04:02

标签: ios objective-c core-data

我已经将一个核心数据制作成了一对多的关系。 一个人可以拥有多个银行账户。

现在

我已添加与人关联的人员和银行帐户。

代码是

@synthesize setContainer,textField;

- (void)viewDidLoad {
    [super viewDidLoad];
    self.setContainer = [[NSMutableSet alloc]init];
    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    NSEntityDescription *entityPerson = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:appDelegate.managedObjectContext];
    NSManagedObject *newPerson = [[NSManagedObject alloc]initWithEntity:entityPerson insertIntoManagedObjectContext:appDelegate.managedObjectContext];
    [newPerson setValue:@"Steve" forKey:@"name"];
    [newPerson setValue:@"UK" forKey:@"address"];
    [newPerson setValue:@123456 forKey:@"mobile_no"];

    NSEntityDescription *entityAccount = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:appDelegate.managedObjectContext];
    NSManagedObject *newaccount = [[NSManagedObject alloc]initWithEntity:entityAccount insertIntoManagedObjectContext:appDelegate.managedObjectContext];
    [newaccount setValue:@98765432100 forKey:@"acc_no"];
    [newaccount setValue:@"Saving" forKey:@"acc_type"];
    [newaccount setValue:@1000000 forKey:@"balance"];

    // Add Address to Person
   setContainer = [newPerson mutableSetValueForKey:@"person"];
    [self.setContainer addObject:newaccount];
    NSLog(@"%@",self.setContainer);  // Save Managed Object Context
    NSError *error = nil;
    if (![newPerson.managedObjectContext save:&error]) {
        NSLog(@"Unable to save managed object context.");
        NSLog(@"%@, %@", error, error.localizedDescription);
    }

我的问题是

当我在文本字段中键入我的手机号码并按下“检查您的余额”按钮时,我的余额应该打印在日志中,我已输入核心数据值。

图片是

enter image description here

输出

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用NSPredicate根据选定的过滤器获取实体,在您的情况下是电话号码

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mobile_no = %@",phoneNumber];

NSFetchRequest *fetchRequest = [NSFetchRequest new];
[fetchRequest setPredicate:predicate];
NSError *error;
NSArray *result = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

基于此,如果用户有多个银行账户,您可以执行金额计算,因为您已经拥有所有详细信息(假设他在所有银行账户上使用相同的电话号码)

以下是NSPredicate

的文档

也可以找到一份好的备忘单here