我有一个简单的CoreData应用程序,它存储信息,姓名,日期等…一切都在正常运行。有一个search方法,它使用NSArrayController上的setFetchPredicate并将结果显示在一个表中-这是有效的。
在此方法的末尾添加一些额外的代码,因此在方法结束之前,我添加了一行简单的代码来获取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-计数= 1200
B-计数= 1200
NSTable显示正确的对象数量
第二次运行:
A-Count =4(这对于搜索参数是正确的)
B-计数=4
当调用B- NSArrayController NSLog时,它第一次出现,尽管该方法尚未基于谓词过滤计数。但这是在方法的末尾,应该在这一点上过滤NSArrayController。
我在这里遗漏了一些简单的东西-任何帮助都将不胜感激。
谢谢
发布于 2016-08-18 04:48:18
rearrangeObjects使用filterPredicate。fetch使用fetchPredicate,但fetch被推迟到运行循环的下一次迭代。
https://stackoverflow.com/questions/39002373
复制相似问题