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 [重复]

错误 TS2318:找不到全局类型“对象”

添加新模型版本后Coredata找不到模型

CoreData:警告:无法为实体“任务”加载名为“任务”的类。找不到类,改用默认的 NSManagedObject

在 CoreData 中使用 NSManagedObject 子类找不到 xcode8 标头

在 NSManagedObjects 上的错误调试属性的对象上找不到属性