CoreData - fetch 找不到对象
Posted
技术标签:
【中文标题】CoreData - fetch 找不到对象【英文标题】:CoreData - fetch does not find objects 【发布时间】:2011-07-30 17:28:23 【问题描述】:我是 coredata 的新手,我正在构建一个简单的数据库,结果是 xml。
我正在测试记录是否存在,如果不存在,则添加一个新的,然后保存,但是当我再次这样做时,e 继续保存,而不是找到记录。
这个类方法被调用两次(来自 xml 的 2 条记录),然后我保存在邮件类中。 ActivityID 是一个 NSNumber。
我做错了什么?
代码:
+(CompanyActivity *)createActivityWithInfoFromServer:(NSDictionary *)activityDictFromArray inManagedObjectContext:(NSManagedObjectContext *)context
CompanyActivity *companyActivity = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"CompanyActivity" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"ActivityID == %@", [activityDictFromArray objectForKey:@"ActivityID"]];
NSError *error = nil;
companyActivity = [[context executeFetchRequest:request error:&error] lastObject];
NSLog(@"activity: %@", companyActivity);
if (!error && !companyActivity)
companyActivity = [NSEntityDescription insertNewObjectForEntityForName:@"CompanyActivity" inManagedObjectContext:context];
companyActivity.ActivityID = [NSNumber numberWithInt:[[activityDictFromArray objectForKey:@"ActivityID"] integerValue]];
companyActivity.ActivityDescription_PT = [activityDictFromArray objectForKey:@"ActivityDescription_PT"];
companyActivity.ActivityDescription_EN = [activityDictFromArray objectForKey:@"ActivityDescription_EN"];
companyActivity.DateChangedStamp = [NSDate date];
else
NSLog(@"no Activity created. Errors: %@", error);
return companyActivity;
【问题讨论】:
【参考方案1】:问题出在 NSNumber 中。它一直将记录保存到数据库中,但从未找到它们。我现在已经将类型 op 数据更改为 NSString。
谢谢,
强化学习
【讨论】:
【参考方案2】:首先,您正在泄漏request
。其次,你应该做一些基本的调试来发现问题。设置一些断点并检查您的 fetch 以确保您插入到 fetch 中的活动 id 是有效值。确保您还使用正确的值正确填写了稍后创建的对象。查看所有进展情况,如果您的问题尚未解决,请在问题中添加更多信息以及您的进度。
【讨论】:
嗨,保罗。我在 ios 5 中使用 ARC。ActivityID 有一个值。我认为这可能与上下文有关,但我不支持。我有一个 NSEnumeration,在根据需要多次调用此方法后,我调用 [context save]。我认为问题出在这里...但是,在上面的代码中,都正确吗? 上面的代码似乎是正确的,(假设您的错误对象始终为零)它高度依赖于正在操作的数据。如果内存对象中有任何错误数据,则在保存上下文时可能会出错。 您好,没有错误。我有 NSLog,没有人给我错误...我们可以在 iChat 或 GoogleTalk 中交谈,我在这里发布结果吗? iChat:rui.lopes@me.com googleTalk:rui.ruilopes@gmail.com【参考方案3】:在创建新对象后,您似乎并没有真正保存它们。尝试将以下代码添加到您的对象创建块:
[context save:&error];
if(error)
NSLog(@"error saving entities: %@", error);
【讨论】:
以上是关于CoreData - fetch 找不到对象的主要内容,如果未能解决你的问题,请参考以下文章
CoreData 错误:找不到类,而是使用默认的 NSManagedObject [重复]
CoreData:警告:无法为实体“任务”加载名为“任务”的类。找不到类,改用默认的 NSManagedObject