1

我有许多不同NSArray的 ' 存储在.dat文件中,在Documents我的 iPhone 应用程序的文件夹中,如下所示:

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

文件的数量.dat是未知的,它会根据与用户操作应用程序相关的许多因素而增加或减少。

这些NSArray's存储在.dat文件中的内容是什么?它们包含NSString's. 重要的是要说count每个 NSArray 我的变化,就像这样:

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"

ETC..

我必须定期验证NSString这些NSArray's是否已被修改,以通知用户某些事件。在从 Internet 进行 XML 解析之后,我已经能够在内存中拥有与先前存储在文件夹中的NSArray's相应文件相对应的新文件。.datDocuments

由于我有很多 .dat文件,我的问题是:

我如何 有效地并且一次比较我在内存中的 新的NSArray's (NSArray *john, *mary, *bob等等......用户是否已修改任何(等... )?john.dat, mary.dat, bob.datDocumentsNSString's"Mon, 11 Jun 2012 04:52:06 GMT","Tue, 12 Jun 2012 04:51:59 GMT",

谢谢你的帮助!

4

2 回答 2

1

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

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

于 2012-06-13T13:42:34.707 回答
1

好吧,如果您满足于将数组存储为 .dat 文件(我猜是使用 NSKeyedArchiver),那么 Martin 的答案可能是最好的,并且是经过验证的真实比较方法

我可能采取的方法是将 NSStrings 存储在NSDictionarys 而不是 NSArrays 中。然后你可以在它的值上设置一个观察者,所以当从你比较的 XML 文件中提取一个字符串时,如果需要替换并且观察者将被调用,以便你可以通知用户(NSNotificationCenter如果不熟悉,请参阅和 KVO)。

与 .dat 文件相比,将字符串存储在 CoreData 中也可能是有益的(通常是),然后您可以配置 anNSFetchedResultsController以关注您的数据并在获取新数据时执行上述操作。

于 2012-06-13T14:28:10.303 回答