问题本身: 我将一些实体与Web服务器同步。它们被组织成区域(它们的父母),它们本身就在建筑物中。因此,对于每个实体,我查询是否已经存在匹配区域,如果不存在,我创建一个新区域。现在的问题是,如果刚刚创建区域,我将无法获取这些区域(因此每次都会创建一个新的但相同的区域)。我还有一个问题,一旦通过向其添加新创建的区域而无法获取正确的建筑物,完全相同的查询的结果突然变空。
我确保[fetch setIncludePendingChanges:YES]
已设置,我也使用普通结果模式而不是NSDictionaryResultType(参见:NSDictionaryResultType expression not taking into account newly inserted objects)。
我希望有人可以提供帮助。
答案 0 :(得分:1)
获取请求从上下文中提取已保存数据的上下文中提取数据。当您创建新的托管对象时,您可以在上下文中创建它(例如,您的临时书),但不是在持久性存储中。因此,在获取新创建的对象之前,必须将该上下文的更改保存到商店中。
答案 1 :(得分:0)
假设我理解你的描述是正确的:我认为你获取数据的谓词非常复杂,这迫使核心数据从持久存储中读取。因此,忽略了托管对象上下文中的修改。
例如,我们有一个像
这样的数据模型Category 1---n Icon
我们想要获取
的所有类别usable
为TRUE
enabledByAdmin
为TRUE
我们使用这样的谓词:
NSArray *predicates = @[[NSPredicate predicateWithFormat:@"icons.@count > 0"],
[NSPredicate predicateWithFormat:@"ANY icons.usable = 1"],
[NSPredicate predicateWithFormat:@"ANY icons.enabledByAdmin = 1"]];
NSCompoundPredicate *cp;
cp = [[NSCompoundPredicate alloc] initWithType:NSAndPredicateType
subpredicates:predicates];
此复杂谓词强制核心数据直接从持久存储中读取。
我的解决方案是保存托管对象上下文并在之后获取数据。