CoreData - fetch没有找到对象

时间:2011-07-30 17:28:23

标签: iphone objective-c core-data nsfetchrequest

我是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;
}

3 个答案:

答案 0 :(得分:2)

问题出在NSNumber上。它一直将记录保存到数据库中,但从未找到它们。我现在已经将类型操作数据更改为NSString。

谢谢,

RL

答案 1 :(得分:1)

首先,你正在泄漏request。其次,你应该做一些基本的调试来找到问题。设置一些断点并检查您的提取,以确保您插入到提取中的活动ID是有效值。确保您还使用正确的值正确填写您稍后创建的对象。了解所有情况以及如果您的问题尚未解决,请根据您的进度添加更多信息。

答案 2 :(得分:0)

在创建新对象后,您似乎并未实际保存新对象。尝试将以下代码添加到对象创建块:

[context save:&error];
if(error) {
    NSLog(@"error saving entities: %@", error);
}