我在NSArray
文件中存储了多个不同的.dat
,位于我的iPhone应用程序的Documents
文件夹中,如下所示:
john.dat
mary.dat
bob.dat etc...
.dat
个文件的数量未知,并会根据与用户操作应用程序相关的多个因素而增加或减少。
NSArray's
文件中存储的这些.dat
的内容是什么?它们包含NSString's
。重要的是要说每个NSArray的count
变化,如下:
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"
等。
我必须定期验证这些NSString
中的每个NSArray's
是否已被修改,以通知用户某些事件。在从Internet进行XML解析之后,我已经能够在内存中拥有与之前存储在NSArray's
文件夹中的相应.dat
文件相对应的新Documents
。
由于我有很多 .dat
个文件,我的问题是:
如何比较 有效和一时 新的NSArray's
(NSArray *john, *mary, *bob
,等。 .. )我在内存中(由于这种XML解析),旧的存储在相应的john.dat, mary.dat, bob.dat
,等... 文件中Documents
文件夹并通知用户是否修改了NSString's
("Mon, 11 Jun 2012 04:52:06 GMT","Tue, 12 Jun 2012 04:51:59 GMT",
等... )?
感谢您的帮助!
答案 0 :(得分:1)
如果您乐意更改.dat文件的格式,可以计算每个数组内容的哈希值并将其存储在文件的开头。获得新数据后,您可以计算其哈希值,并将其与存储在文件中的哈希值进行比较。
您选择的散列函数将决定计算效率,但I / O将被最小化。
答案 1 :(得分:1)
好吧,如果你满足于将你的数组存储为.dat文件(我猜的是NSKeyedArchiver),那么Martin的回答可能是最好的,而且是经过验证的真实比较方法
我可能采取的方法是将NSStrings存储在NSDictionary
s而不是NSArrays中。然后你可以在它的值上设置一个观察者,所以当你从比较的XML文件中提取一个字符串时,必要时替换并调用观察者,这样你就可以通知用户(如果没有,请参见NSNotificationCenter
和KVO)熟悉)。
将文件串存储在CoreData中可能也是有益的(通常是),而不是.dat文件,然后您可以配置NSFetchedResultsController
以关注数据并在新数据时执行上述操作取出。