我有一个CoreData应用程序,可从* .xml文件导入信息。该文件有两个部分,摘要和详细信息。
本质上,我有两个表视图,tvSummary和tvDetail;两个数组控制器acSummary和acDetail;还有一个可变数组maDetail。
导入文件时,我使用[acSummary addObject:newSummaryData];
方法将摘要数据记录添加到acSummary阵列控制器。导入文件后,摘要数据字段将填充tvSummary表视图。
当我使用[acDetail addObject:newDetailData];
方法将详细数据记录添加到acDetail阵列控制器时,最多可能需要二十分钟才能导入72000条记录(大多数文件包含3600至21600条记录)。完成此冗长的过程后,导入的详细数据字段将填充tvDetail表视图。当我在tvSummary表视图中进行选择时,在tvDetail表视图中显示的数据将更改为与所选行匹配。我认为这是应该起作用的方式。
在Cocoa / Objective-c / Core Data学习过程中(我仍然是新手),我发现我可以在大约五秒钟内将72000条记录复制到maDetail可变数组中。我还发现我可以使用[acDetail setContent:maDetail];
方法在大约两秒钟内将maDetail可变数组的内容复制到acDetail数组控制器。
我不知道的是,如何使acDetail数组控制器记住在tvSummary表视图中选择另一行时给出的内容。我看到了强迫数组控制器“保存”的参考,但是,我找不到有关如何实现这种方法的任何文档。任何建议或指示将不胜感激。
最佳答案
就像该类的文档告诉我们的那样,NSArrayController是“一个绑定兼容的类,用于管理对象的集合。” Cocoa绑定就像一个自动控制器,可在模型和视图对象之间同步数据-每次修改绑定属性时,都会通知绑定到该属性的所有对象,并在必要时进行更新。
如果通过NSArrayController一次向可变数组中添加72,000个对象,则可能发送了很多不必要的通知,并且正在执行许多无用的更新。有几种方法可以解决这个问题,但是我建议您先尝试最简单的方法...
无需将每个记录单独添加,而是将所有记录添加到单独的可变数组中。完成后,使用NSArrayController的-addObjects:
方法立即将所有对象添加到托管数组。这应该通知观察者,数组已更改一次,而不是每个对象更改一次,我认为您会发现性能有了实质性的提高。
我会解决您对储蓄的担忧,但我真的不明白您要做什么。也许您可以告诉我们更多信息,然后将其重述为实际问题。
关于objective-c - CoreData NSArrayController addObject:速度缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6542888/