核心数据关系,如何从关系中插入和检索数据

Posted

技术标签:

【中文标题】核心数据关系,如何从关系中插入和检索数据【英文标题】:core data relationship, how to insert and retrieve data from relationships 【发布时间】:2016-09-01 15:25:49 【问题描述】:

我是ios开发的新手,在使用核心数据时遇到问题,特别是在使用关系时

我有以下关系 enter image description here

如您所见,我有树实体,我想做的是在特定用户消费食物时将数据插入 CredentialsFood 实体

所以我尝试使用以下代码插入

    // adding to credetialsFood Entity
NSManagedObjectContext *context1 = [appD managedObjectContext];
CredentialsFood *credentialsFood = (CredentialsFood *)        [NSEntityDescription insertNewObjectForEntityForName:@"CredentialsFood"   inManagedObjectContext:context1];
NSDate *currentDate = [NSDate date];
credentialsFood.toFood.food_id = item_id;
credentialsFood.toCred.email = @"123";
credentialsFood.date = currentDate;


// here's where the actual save happens,
if(![context1 save:&errorCoreData])
    NSLog(@"Problem saving: %@",[error localizedDescription]);

else
    NSLog(@"Food date Saved");

代码运行良好 但是,在检索时,我尝试例如获取所有 CredentialsFood.date 其中 Credentials.email = 123 我什么也没收到

我真的不知道我做错了什么这是要检索的代码

NSManagedObjectContext *context2 = [appD managedObjectContext];

NSEntityDescription *foodEntity =[NSEntityDescription entityForName:@"Credentials" inManagedObjectContext:context2];

NSFetchRequest *request = [[NSFetchRequest alloc]init];

NSError *error2 = nil;
NSString * userid =@"123";

NSPredicate *foodPredicate = [NSPredicate predicateWithFormat:@"(email contains[cd] %@)",userid];

[request setEntity:foodEntity];
[request setPredicate:foodPredicate];

NSManagedObject *matches = nil;
NSArray *objects = [context executeFetchRequest:request error:&error2];


if([objects count]== 0)
    NSLog (@"no matches found");


else 
    //NSLog(@"aasdasdad %@", objects);
    matches = [objects objectAtIndex:0];
    NSLog(@"bb %@",[matches valueForKey:@"name"]);
    NSLog(@"bb %@",[matches valueForKey:@"email"]);
    NSLog(@"bb %@",[matches valueForKey:@"password"]);
    //NSLog(@"hhhhhhhhhhhhhh %@",[matches valueForKey:@"credentails"]);

    NSMutableSet *query = [matches mutableSetValueForKey:@"credentails"];


    NSArray *financialData =[matches valueForKeyPath:@"credentails"];
    NSLog(@"%@",financialData);
    NSLog(@"%@",[financialData valueForKey:@"date"]);

数据在核心数据中,但我不知道它是否正在执行关系,Food 实体已填充,CredentialsFood 也已填充

我也收到警告 抽象实体食物没有孩子 抽象实体 Credentials 没有子实体 抽象实体 CredentialsFood 没有子实体

提前致谢

【问题讨论】:

【参考方案1】:

当你第一次创建对象时:

CredentialsFood *credentialsFood = (CredentialsFood *) [NSEntityDescription insertNewObjectForEntityForName:@"CredentialsFood" inManagedObjectContext:context1];
NSDate *currentDate = [NSDate date];
credentialsFood.toFood.food_id = item_id;
credentialsFood.toCred.email = @"123";

...您似乎没有为toFoodtoCred 关系分配任何内容。相关对象不会自动创建,因此这些属性将为 nil。在 Objective-C 中,当这些属性为 nil 时运行此代码不是错误,但代码没有任何效果。看起来您需要创建(或获取)FoodCredentials 的实例,并将这些新对象分配给 toFoodtoCred 属性。

【讨论】:

以上是关于核心数据关系,如何从关系中插入和检索数据的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 从一对多关系中检索属性

如何在核心数据中检索实体的唯一关系

检索关系核心数据中的值

核心数据关系 NSOrderedSet 在每个设备上返回不同的顺序

从关系数据库中检索数据

如何以一对多关系访问数据?