2010-12-23 64 views
1

我試圖使用的plist存儲陣列與下面的代碼:問題保存的plist

NSString *name = firstName.text; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Names" ofType:@"plist"]; 

    NSMutableArray *namesArray = [[NSMutableArray alloc] initWithContentsOfFile:path]; 

    [namesArray addObject:name]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    [paths release]; 
    NSString *docDirPath = [documentsDirectory stringByAppendingPathComponent:@"Names.plist"]; 
    [namesArray writeToFile:docDirPath atomically:YES]; 

    namesArray = [[NSMutableArray alloc] initWithContentsOfFile:docDirPath]; 

此代碼似乎工作。使用NSLog,我發現在這段代碼執行後,plist包含我想要的內容,但是,我的程序崩潰了,因爲它在設備上生成了一個EXC_BAD_ACCESS,而在模擬器上它只是崩潰而沒有解釋。有誰知道爲什麼會發生?

回答

2
NSArray *paths = NSSearchPathForDirectoriesInDomains 
(NSDocumentDirectory, NSUserDomainMask, YES); //Auto-released array 

NSString *documentsDirectory = [paths objectAtIndex:0]; 

[paths release]; //Oh noes! 

您不擁有對paths的引用,所以請勿將其釋放。刪除[paths release],我敢打賭你沒事。你已經崩潰了,因爲自動釋放池在你自己完成之後釋放路徑。

答曰the guide

你只釋放或你自己的自動釋放對象。如果使用名稱以「alloc」或「new」開頭或包含「copy」的方法創建對象,或者如果您向其發送保留消息,那麼您將獲得對象的所有權。

0

您是否檢查過,它在哪個位置給出EXC_BAD_ACCESS錯誤。

在你的代碼中有兩個錯誤的東西;那些是。

Plist文件由一個字典而不是一個數組組成,在這裏代碼中您將文件數據複製到一個數組中。並將數組保存到plist文件。

第二個是你正在發佈「路徑」數組,沒有完成它的使用。你必須在聲明結尾處釋放該數組;就像在將數組更新到文件之後一樣。

問候,

薩蒂亞