1

我有个问题。在获取一些数据和未保存的更改时,我的 iOS 应用程序的行为非常奇怪。为了您的兴趣,在与 Web 服务器同步一些数据时会出现整个行为。我想做一个完全同步,然后保存更改。我尝试了一些解决方法,但没有一个工作得足够好。

对于问题本身:我将一些实体与 Web 服务器同步。它们被组织成区域(它们的父级),它们本身位于建筑物中。因此,对于每个实体,我都会查询是否已经存在匹配区域,如果不存在,则创建一个新的。现在的问题是,如果刚刚创建这些区域,我将无法获取它们(因此每次都会创建一个新但相同的区域)。我还有一个问题,即一旦通过向其添加新创建的区域进行更改,我就无法再获取正确的建筑物,完全相同的查询的结果突然为空。

我已确保[fetch setIncludePendingChanges:YES]已设置,并且我还使用正常结果模式而不是 NSDictionaryResultType (请参阅:NSDictionaryResultType 表达式不考虑新插入的对象)。

我希望有人能帮忙。

4

2 回答 2

1

Fetch 请求从上下文中获取数据,该上下文已将数据保存在上下文从中获取的持久存储中。当你创建一个新的托管对象时,你是在你的上下文(也就是你的便签簿)中创建它,但不是在你的持久存储中。因此,在您获取新创建的对象之前,您必须将该上下文的更改保存到您的存储中。

于 2012-07-30T12:27:39.767 回答
0

假设我理解您的描述是正确的:我认为您获取数据的谓词非常复杂,这会迫使核心数据从持久存储中读取。因此,托管对象上下文中的修改被忽略。

例如,我们有一个数据模型,如

Category 1---n Icon

我们想获取所有类别

  1. 有图标(多于零),
  2. usable具有属性为的图标TRUE
  3. 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];

这个复杂的谓词强制核心数据直接从持久存储中读取。

我的解决方案是保存托管对象上下文并在之后获取数据。

于 2015-03-11T13:43:49.060 回答