gpt4 book ai didi

ios - 从提取请求返回的对象有不正确的数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:35 26 4
gpt4 key购买 nike

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

根据属性的类型,我会显示或不显示通知。成功建立连接后,我将对象的属性类型从“已插入”设置为“已更新”。然后,当我刷新 View 时,我从 coredata 中提取所有对象并检查它们的属性是否为“已更新”类型。我遇到的问题是,我刚刚尝试更改为“已更新”的获取请求中返回的对象仍然显示获取请求中的旧“插入”值,但不会在提交后立即显示。就像他们正在恢复一样。 (我正在保存上下文)

更令人困惑的是我得到了一个程序来查看存储在设备上的数据库文件中的实际表,它实际上显示了表中更新的正确值。但是获取请求仍然返回带有不正确数据的对象。再多的刷新也无法解决这个问题。

当 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;

最佳答案

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

将其视为答案而不是评论会很有帮助,因此我采纳了他的评论并对其进行了一些扩展。

原始评论:

[self managedObjectContextForCurrentThread] - I think this can cause a problem, as different contexts can have different version of NSManagedObjects. You can call [fetchReq setShouldRefreshRefetchedObjects:YES] and it will return the most up-to-date version of your objects

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

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

简而言之,请注意您指的是相同的上下文,否则您在上下文 1 中更新的任何内容都不会与您从上下文 2 中检索到的内容同步。

关于ios - 从提取请求返回的对象有不正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com