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.infoName = [coder decodeObjectForKey : kNameKey];'). –