2011-06-17 24 views
2

我在將大型plist填充到數組中時遇到了一些問題。這裏是代碼段的給我的問題:Objective C - 從超大型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); 

我的問題是,顯示該車次陣列在日誌中的每個可變數組,在日誌中的路線陣列顯示就好了,但日誌後乾脆沒有按」根本不出現。通常當發生問題時,日誌會顯示類似「Trips:()」的內容,但在這種情況下該行不會出現。我可以看到兩個實例之間唯一的區別在於plist路由是一個包含大約1000個字典對象的數組,行程中包含近92,000個對象。對plists的大小有限制嗎?

在此先感謝。

+0

您是否給系統足夠的時間來處理第二個列表(即在應用程序未完成之前未終止)?你的程序崩潰了,還是隻輸出日誌行?對於巨大的NSMutableArrays,原則上沒有任何錯誤,如果項目很小,甚至92k項目也不應該對iPhone造成壓力。如果項目很大,則可能是內存不足。 –

+0

應用程序不以任何方式退出或終止。在運行之後顯示其他日誌或執行其他操作,而不會出現問題。這似乎需要大約3秒鐘才能完成我認爲是數據檢索的任務,但只需簡單地跳過並繼續。 – Thorlax402

+0

可能很明顯的一些事情:請問應用程序包中是否添加了trips.plist? –

回答

3

「是否有某種限制對Plist檔案的大小?」

沒有向Plist檔案的大小限制,但有一個限制的y的數據量您可以輸入NSLog()命令。

如果trips實際上是nil,則NSLog()調用會成功,並且只需打印出(null)。但是,trips陣列已填充,這就是爲什麼它不打印出來的原因:NSLog()在說:「對不起,我不會讓你打印出所有這些」。

由於可能的安全問題或性能問題,我認爲這可能會在更新版本的OS X中發生變化。 (過去,用戶的硬盤驅動器會填滿大小爲GB的日誌文件,這是由一個進程記錄每秒數百次的錯誤消息引起的;現在限制爲每秒500個日誌)。這有點令人困惑,爲什麼沒有打印出來,你從Xcode或任何東西都沒有反饋,但我想系統無法知道你使用NSLog()是否有良好的意圖。

+0

你是對的!我試着記錄數組的數量,它給了我適當的值。然後我重新檢查了我的過濾器,結果我忘記了在謂詞中使用stringWithFormat,所以我可以適當地設置過濾器值。改變它後,我收回所有正確的數據。謝謝您的幫助。 – Thorlax402

1

根據文檔,如果存在解析問題或打開文件時出現問題,則返回nil。在這個龐大的文件中是否有可能破壞xml的壞字符或拼寫錯誤?

「 返回值。 - > 一種含有由aPath指定的文件的內容返回陣列NIL如果文件不能被打開,或者如果該文件的內容不能被解析成一個數組。

+0

這不可能是因爲那麼日誌會輸出一個空指針(null)。謝謝你的迴應。 – Thorlax402