NSArrayController setFetchPredicate

NSArrayController setFetchPredicate

我有一个简单的 CoreData 应用程序,它存储信息、姓名、日期等...并且一切正常。有一种搜索方法,它在 NSArrayController 上使用 setFetchPredicate,结果出现在 table 中 - 这是可行的。

考虑在此方法的末尾添加一些附加代码,因此就在该方法结束之前,我添加了一行简单的代码来获取 NSArrayController 的计数。

  [searchArrayController setFetchPredicate: searchPredicate];

  [searchArrayController rearrangeObjects];

  NSlog(@"Count = %lu", (unassigned long)[[searchArrayController arrangedObjects] count]);

结果:计数 = 1200

(1200是数据库中对象的数量。)

table 显示正确,即显示正确数量的数据对象,但是 NSLog 计数是整个数据库。

我在方法的开头放置了第二个 NSLog。如果我 运行 第二次搜索,第二次 NSLog 显示正确的对象数。

  Beginning method:
  NSlog(@"A-Count = %lu", (unassigned long)[[searchArrayController arrangedObjects] count]);
  ...

  [searchArrayController setFetchPredicate: searchPredicate];

  [searchArrayController rearrangeObjects];

  NSlog(@"B-Count = %lu", (unassigned long)[[searchArrayController arrangedObjects] count]);
  end of method

结果:

第一个运行:

计数 = 1200

B 计数 = 1200

NSTable 显示正确的对象数

第二个运行:

A-Count = 4(这对于搜索参数是正确的)

B 计数 = 4

调用B-Count NSLog时,虽然NSArrayController方法还没有根据谓词过滤,但第一次出现。但这是在方法的最后,此时应该过滤 NSArrayController。

我必须在这里遗漏一些简单的东西 - 任何帮助将不胜感激。

谢谢

rearrangeObjects 使用 filterPredicatefetch 使用 fetchPredicatefetch 被推迟到运行循环的下一次迭代。