核心数据关系,如何从关系中插入和检索数据
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";
...您似乎没有为toFood
或toCred
关系分配任何内容。相关对象不会自动创建,因此这些属性将为 nil。在 Objective-C 中,当这些属性为 nil 时运行此代码不是错误,但代码没有任何效果。看起来您需要创建(或获取)Food
和 Credentials
的实例,并将这些新对象分配给 toFood
和 toCred
属性。
【讨论】:
以上是关于核心数据关系,如何从关系中插入和检索数据的主要内容,如果未能解决你的问题,请参考以下文章