NSArrayController setFetchPredicate

问题描述 投票:0回答:1

我有一个简单的CoreData应用程序,它存储信息,名称,日期等......一切正常。有一种搜索方法,它在setFetchPredicate上使用NSArrayController,结果显示在表格中 - 这是有效的。

看一下在这个方法结束时添加一些附加代码,所以在方法结束之前,我添加了一个简单的行来获取NSArrayController的计数。

  [searchArrayController setFetchPredicate: searchPredicate];

  [searchArrayController rearrangeObjects];

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

结果:计数= 1200

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

表格显示正确,即显示正确数量的数据对象,但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

结果:

第一次运行:

A-Count = 1200

B-Count = 1200

NSTable显示正确数量的对象

第二轮:

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

B-Count = 4

虽然在调用B-Count NSLog时,NSArrayController尚未根据谓词进行过滤,但这似乎是第一次出现。但这是在方法结束时,此时应该过滤NSArrayController。

我必须在这里错过一些简单的东西 - 任何帮助都会受到赞赏。

谢谢

objective-c macos core-data nspredicate nsarraycontroller
1个回答
0
投票

rearrangeObjects使用filterPredicatefetch使用fetchPredicate但是fetch被推迟到runloop的下一次迭代。

© www.soinside.com 2019 - 2024. All rights reserved.