2012-06-13 15 views
1

我存储在.dat文件许多不同NSArray的,在我的iPhone应用程序的Documents文件夹,例如:如何快速枚举和比较Objective-C中许多NSArrays的对象?

john.dat 
mary.dat 
bob.dat etc... 

.dat文件的数量是未知的,它会增加或根据降低一些与用户对应用程序的操作有关的因素。

这些NSArray's存储在.dat文件中的内容是什么?它们包含NSString's

john.dat Contains this array of strings: 
"Mon, 11 Jun 2012 04:52:06 GMT", 
"Tue, 12 Jun 2012 04:51:59 GMT", 
"Wed, 13 Jun 2012 04:52:30 GMT", 
"Thu, 07 Jun 2012 04:52:00 GMT", 


mary.dat Contains this array of strings: 
"Mon, 11 Jun 2012 04:52:06 GMT", 
"Tue, 12 Jun 2012 04:51:59 GMT", 


bob.dat Contains this array of strings: 
"Mon, 11 Jun 2012 04:52:06 GMT", 
"Tue, 12 Jun 2012 04:51:59 GMT", 
"Wed, 13 Jun 2012 04:52:30 GMT", 
"Thu, 07 Jun 2012 04:52:00 GMT", 
"Fri, 08 Jun 2012 04:51:59 GMT", 
"Sun, 10 Jun 2012 04:50:55 GMT" 

等。

我必须定期检查,如果这些NSArray's的每个NSString已被修改,以通知:它说,count每个NSArray的我有所不同,像这样是很重要的某些事件的用户。在从互联网上进行XML解析之后,我已经能够在内存中存储对应于先前存储在Documents文件夹中的其各自的.dat文件的新的NSArray's

因为我有很多.dat文件,我的问题是:

如何比较高效,同时NSArray's(NSArray *john, *mary, *bob等...),我有在内存中(作为这个XML解析的结果),与旧的存储在其相应的john.dat, mary.dat, bob.dat,等...文件在Documents文件夹中并通知使用r是否有任何的NSString's"Mon, 11 Jun 2012 04:52:06 GMT","Tue, 12 Jun 2012 04:51:59 GMT",等...)已被修改?

感谢您的帮助!

+1

为什么不使用SQLite或类似的方法来存储数据? –

+0

是的,我可以采取SQLite。感谢这宝贵的见解! – Winston

+1

不是比较本身,而是您可以通过使用'FNSubscribeByPath'函数修改目录中的文件来请求通知。那么你不需要查询变化。 – pmdj

回答

1

如果您很乐意更改.dat文件的格式,您可以计算每个数组内容的散列并将其存储在文件的开头。当你获得新的数据时,你可以计算它的散列并将其与文件中存储的散列进行比较。

您选择的散列函数将决定计算效率,但I/O会最小化。

+0

这也是好想法。我会考虑它。谢谢! – Winston

1

好吧,如果你的内容与你的存储数组作为.dat文件(用的NSKeyedArchiver我猜),然后马丁的答案很可能是最好的和比较

的尝试和真正的方法我可能会采取的方法是将NSStrings存储在NSDictionary而不是NSArrays中。然后你可以设置一个观察者的值,所以当你从比较的XML文件中拉出一个字符串时,如果需要的话替换,并且观察者将被调用,这样你可以通知用户(见NSNotificationCenter和KVO,如果不熟悉的话)。

将您的字符串存储在CoreData而不是.dat文件中可能也是有益的,那么您可以配置NSFetchedResultsController来关注数据,并在获取新数据时执行上述操作。

+0

感谢您的有用评论,我也在考虑所有这一切。 – Winston