在我爲一個學校項目創建的iOS應用程序中,我無法保存存儲在NSMutableArray中的數據。該數組是在應用程序委託文件中創建的,然後委託它在各種其他視圖控制器文件中創建。存儲在數組中的數據由由NSStrings和NSNumbers組成的自定義類作爲屬性組成。如何在iOS中保存充滿自定義類的數組?
我已經閱讀並遵循了這個網站上的大量例子,現在已經有一個星期左右的時間了,但是我不能爲我的生活弄清楚它。我也研究過核心數據,但我無法弄清楚如何在沒有徹底重新開始的情況下實現這一點,並且不幸的是我時間緊迫。
事情我已經嘗試:
歸檔在WillTerminate方法。 (activityArray是我的數組)
- (void)applicationWillTerminate:(UIApplication *)application {
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* arrayFile = [documentsPath stringByAppendingPathComponent:@"arrayFile"];
[NSKeyedArchiver archiveRootObject:activityArray toFile:arrayFile];
[activityArray release];
然後在AppDelegate中的didFinishLaunchingWithOptions方法解除存檔文件
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *arrayFile = [documentsPath stringByAppendingPathComponent:@"arrayFile"];
if ([fileManager fileExistsAtPath:arrayFile]) {
NSLog(@"yes");
activityArray = [NSMutableArray arrayWithContentsOfFile:arrayFile];
} else {
activityArray = [[NSMutableArray alloc] init];
}
按照對其他問題的建議,我的確在自定義類以下我有(這個類有2個NSString,activityName和activityDescription)。
- initWithCoder:(NSCoder *)aCoder {
self = [super init];
activityName = [[aCoder decodeObjectForKey:@"activityName"] retain];
activityDescription = [[aCoder decodeObjectForKey:@"activityDescription"] retain];
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:activityName forKey:@"activityName"];
[aCoder encodeObject:activityDescription forKey:@"activityDescription"];
}
但這一切似乎都不適用於我。感謝任何幫助。我覺得這應該是一件相當容易的事情,但我似乎無法得到它。
你是什麼意思,「這似乎沒有工作」?歸檔不起作用嗎?還是取消存檔?你看到正在創建的文件嗎?您的歸檔方法看起來很奇怪。你爲什麼要發佈activityArray?你爲什麼似乎試圖存檔兩次? – 2011-04-02 15:49:03
哦哇,複製並粘貼錯誤。修復了雙歸檔的事情。並且在應用程序關閉時是否應該釋放它?至於什麼不起作用,當我完全關閉應用程序並重新打開它時,以前在activityArray中的所有數據都不存在。我不確定它是否在加載或保存方面存在問題。 – Djmorrsee 2011-04-02 19:21:49