我想將我的對象保存到iPad上的文件系統,但我似乎做錯了什麼。下面是我如何歸檔對象:不知道保存文件
NSString *localizedPath = [self getPlistFilePath];
NSString *fileName = [NSString stringWithFormat:@"%@.plist", character.infoName];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:character];
fileName = [fileName stringByReplacingOccurrencesOfString:@" " withString:@"_"];
localizedPath = [localizedPath stringByAppendingPathComponent:fileName];
NSLog(@"File Path: %@", localizedPath);
if(data) {
NSError *writingError;
BOOL wasWritten = [data writeToFile:localizedPath options:NSDataWritingAtomic error:&writingError];
if(!wasWritten) {
NSLog(@"%@", [writingError localizedDescription]);
}
}
現在,這將創建一個plist文件,我可以在文件系統上看到並讀取該文件。當我嘗試使用以下來解壓縮它:
NSError *error;
NSString *directory = [self getPlistFilePath];
NSArray *files = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:directory error:&error];
NSMutableArray *characters = [[NSMutableArray alloc]init];
for(NSString *path in files) {
if(![path hasSuffix:@"plist"]) {
continue;
}
NSString *fullPath = [directory stringByAppendingPathComponent:path];
NSData *data = [NSData dataWithContentsOfFile:fullPath];
IRSkillsObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // get EXEC_BAD_ACCESS here...
[data release];
[characters addObject:object];
}
我得到一個EXEC_BAD_ACCESS錯誤。
IRSkillsObject符合NSCoding
協議。你可以看到,我評論了我發現錯誤的那一行。
我相信這是我做錯了,但我不能看到它。我試圖通過調試器(在對象的initWithCoder:
方法中放置一個斷點),但我沒有得到任何錯誤。實際上,它會在我觀看時正確地將數據放入對象中。但一旦完成加載數據,它會給出錯誤。我曾嘗試使用retain
方法,但這並沒有幫助。
任何幫助,你可以提供將不勝感激!
就是這樣。我對客觀的c和內存管理還是一個新的東西(我的歷史大部分是在.net中)。當我設置數據時(即'infoName = [coder decodeObjectForKey:kNameKey];')我設置了對象的iVar,然後釋放該項目。當我把它變成self時[propertyname](即'self.infoName = [coder decodeObjectForKey:kNameKey];')它工作。 – 2012-02-16 16:56:01