我有一个简单的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。
我必须在这里错过一些简单的东西 - 任何帮助都会受到赞赏。
谢谢
rearrangeObjects
使用filterPredicate
。 fetch
使用fetchPredicate
但是fetch
被推迟到runloop的下一次迭代。