从获取请求返回的对象具有不正确的数据

时间:2013-09-03 18:14:55

标签: ios objective-c ipad core-data

我试图从获取请求中获取一个对象,并且我正在检查该对象的属性。

根据属性的类型将导致我显示通知。成功连接后,我将对象的属性类型设置为“已插入”中的“已更新”。然后,当我刷新我的视图时,我从coredata中提取所有对象并检查其属性以获得“更新”类型。我遇到的问题是我刚刚尝试更改为'updated'的获取请求中返回的对象仍然显示来自获取请求的旧'inserted'值,但是在提交之后不会立即显示。它就像它们正在复原。 (我保存上下文)

更令人困惑的是,我有一个程序来查看存储在设备上的数据库文件中的实际表,它实际上显示了表中更新的正确值。但是对于具有不正确数据的对象,仍然会返回获取请求。并没有多少令人耳目一新的修复问题。

当coredata文件显示具有正确值的表时,获取请求如何为我提供包含旧/不正确数据的对象?

 // code for the fetch request

// return an array of all assets for a specific customer
NSFetchRequest *fetchReq = [NSFetchRequest fetchRequestWithEntityName:@"Asset"];
fetchReq.predicate = [NSPredicate predicateWithFormat:@"customerID = %@" argumentArray:[NSArray arrayWithObject:customerID]];
NSArray *results = [[CoreDataManager sharedManager] executeFetchRequest:fetchReq];

return results;

//executeFetchRequest method
NSManagedObjectContext *context = [self managedObjectContextForCurrentThread];
NSArray *results = [context executeFetchRequest:fetchRequest error:&error];
return results;

1 个答案:

答案 0 :(得分:0)

@ Arcanfel的建议(在对原始问题的评论中)确实帮助我找到了解决我自己问题的方法,但它隐藏在“显示更多评论”部分。

看到这个作为答案而不是评论会有所帮助,所以我已经发表了他的评论并将其扩展了一点。

原始评论:

  

[self managedObjectContextForCurrentThread] - 我认为这会导致一个   问题,因为不同的上下文可以有不同的版本   NSManagedObjects。你可以调用[fetchReq   setShouldRefreshRefetchedObjects:YES],它将返回最多   最新版本的对象

虽然使用setShouldRefreshRefetchedObjects:YES虽然没有解决我的后续获取请求没有带回正确数据的问题,但它确实让我看看我的上下文管理。

在一种方法中,我设置上下文,然后读取数据。在另一种方法中,我设置了另一个上下文,读取数据,更改它,然后保存该上下文......与我的第一个方法不同的上下文。

简而言之,请注意您指的是相同的上下文,或者您在context1中更新的任何内容与您从context2中检索的内容不同步。