2012-07-30 19 views
1

내 코드에 사용자 정의 객체 배열이 있습니다.사용자 정의 객체 배열 작성

이 배열을 문서 폴더의 파일에 쓰고 싶습니다. 이 답변 iPhone - archiving array of custom objects에 나는이 방법을 구현해야한다고 보았다

- (void)encodeWithCoder:(NSCoder *)aCoder; 
- (id)initWithCoder:(NSCoder *)aDecoder; 

그래서 그들을 구현 :

이 코드는 다음과 같습니다

- (void)encodeWithCoder:(NSCoder *)encoder { 
    [encoder encodeObject:self.data forKey:@"data"]; 
    [encoder encodeObject:self.nome forKey:@"nome"]; 
    [encoder encodeObject:self.celular forKey:@"celular"]; 
    [encoder encodeObject:self.endereco forKey:@"endereco"]; 
    [encoder encodeObject:self.horaConclusao forKey:@"horaConclusao"]; 
    [encoder encodeObject:self.horaAtendimento forKey:@"horaAtendimento"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder { 
    self = [super init]; 
    if (self) { 
    self.data = [decoder decodeObjectForKey:@"data"]; 
    self.nome = [decoder decodeObjectForKey:@"nome"]; 
    self.celular = [decoder decodeObjectForKey:@"celular"]; 
    self.endereco = [decoder decodeObjectForKey:@"endereco"]; 
    self.horaConclusao = [decoder decodeObjectForKey:@"horaConclusao"]; 
    self.horaAtendimento = [decoder decodeObjectForKey:@"horaAtendimento"]; 
    } 

    return self; 
} 

내 코드에서 나는이 방법을 사용하여 쓰기

이전 파일을 제거하는 방법

-(NSString *) plistHistoryFile { 
    NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:[nameFile stringByAppendingPathExtension:@"plist"]]; 

    NSFileManager *filemgr = [NSFileManager defaultManager]; 
    if ([filemgr fileExistsAtPath:path]) { 
    [filemgr removeItemAtPath:path error:&error]; 
    } 

    return path; 
} 

나는이 방법으로 쓰기를 호출합니다 :

-(void) writeArrayToHistoryFile:(NSArray *) array { 
    NSString *path = [self plistHistoryFile]; 
    NSLog(@"%@", path); 

    if ([array writeToFile:path atomically:NO]) { 
    NSLog(@"YES"); 
    } else { 
    NSLog(@"NO"); 
    } 
} 

로그에 대한 내 응답은 항상 NO입니다. 무엇을 잘못하고 있습니까?

답변

0

오류가 무엇인지 알아야하지만 -[NSArray writeToFile:atomically:]을 사용하여 오류를 가져올 수 없습니다. 대신 파일을 다음과 같이 작성하십시오.

NSError *error; 

NSData *data = [NSPropertyListSerialization dataWithPropertyList:array 
    format: NSPropertyListBinaryFormat_v1_0 options:0 error:&error]; 
if (!data) { 
    NSLog(@"failed to convert array to data: %@", error); 
    return; 
} 

if (![data writeToFile:path options:NSDataWritingAtomic error:&error]) { 
    NSLog(@"failed to write data to file: %@", error); 
    return; 
} 

NSLog(@"wrote data successfully"); 
관련 문제