目标C - 从超大的PList填充数组

时间:2011-06-17 15:23:25

标签: iphone objective-c plist

我在将大型plist填充到数组中时遇到了一些麻烦。以下是给我提问的代码片段:

// Populate the routes.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"routes" ofType:@"plist"];
NSMutableArray *routes = [NSMutableArray arrayWithContentsOfFile:filePath];
NSLog(@"Routes: %@", routes);

// Populate the trips.
NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"trips" ofType:@"plist"];
NSMutableArray *trips = [NSMutableArray arrayWithContentsOfFile:filePath2];
NSLog(@"Trips: %@", trips);

我的问题是,在日志中显示每个可变数组后,routes数组的日志显示正常,但trip数组的日志根本不显示。通常当出现问题时,日志将显示类似“Trips :()”的内容,但在这种情况下该行根本不会出现。我可以在两个实例之间看到的唯一区别是路由plist是一个包含大约1000个字典对象的数组,并且trip plist有近92,000个对象。是否对钳子的尺寸有某种限制?

提前致谢。

2 个答案:

答案 0 :(得分:3)

  
    

“钳子的尺寸是否有某种限制?”

  

plist的大小没有限制,但是您可以向NSLog()命令提供的数据量有限制。

如果trips实际上是nil,则NSLog()来电会成功,只需打印(null)即可。然而,填充了trips数组,这就是为什么它根本不打印出来的原因:NSLog()说,“对不起,我不可能让你打印出所有这些”。

我认为由于可能的安全问题或性能问题,在最新版本的OS X中可能会发生这种情况。 (过去,用户的硬盘驱动器会填充大小为GB的日志文件,这是由一个进程每秒记录数百次错误消息的进程引起的;现在限制为每秒500个日志)。令人困惑的是,为什么没有打印出任何内容,而且您没有得到Xcode或其他任何反馈,但我想系统无法知道您对NSLog()的使用是否有良好的意图。

答案 1 :(得分:1)

根据文档,如果存在解析问题或打开文件时出现问题,则返回nil。在那个大文件中是否有可能存在可能破坏xml的错误字符或拼写错误?

”   返回值 - >   包含aPath指定的文件内容的数组。如果无法打开文件或者无法将文件内容解析为数组,则返回nil。