2010-01-04 2 views
0
(void) loadDataFromDisk 
{ 
    NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self pathToDataFile]]; 
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 


    _cells = [[unarchiver decodeObjectForKey:@"Board"] retain]; 

    [unarchiver release]; 
    [data release]; 
} 

(void) saveDataToDisk 
{ 
    NSMutableData *data = [NSMutableData alloc]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:_cells forKey:@"Board"]; 

    [archiver finishEncoding]; 

    [data writeToFile:[self pathToDataFile] atomically:YES]; 

    //[array release]; 
    [data release]; 
    //NSMutableData 
} 

(BOOL)gameDataExists 
{ 
    return [[NSFileManager defaultManager] fileExistsAtPath:[self pathToDataFile]]; 
} 

(NSString *)pathToDataFile 
{ 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    return [path stringByAppendingPathComponent: GAME_DAT]; 
} 

위의 코드는 시뮬레이터에 근무하지만 파일이 내가 종료하고 내 응용 프로그램을 다시로드 후 발견 될 수없는 것 같다 device.it에 실패 . 나는이 같은 pathToDataFile을 구현하는 경우 는 그리고 :가 저장하고로드 파일의 코드는 아이폰 시뮬레이터에서 작동하지만 장치에 실패하는 이유

(NSString *)pathToDataFile 
{ 
    NSArray * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
    NSString *docDir = [path objectAtIndex:0]; 
    return [docDir stringByAppendingPathComponent:GAME_DAT]; 
} 

파일 저장 장치에 일을 다시로드하지만 난 [자체 setNeedsDisplay]를 호출 한 후에 내가 내보기에 구현의 drawRect 방법은 호출 할 수 없습니다.

크리스 는

답변

1

은 번들 경로 장치에 읽기 전용입니다 수 있지만 에뮬레이터에서 읽기 - 쓰기. 따라서 장치에 쓰려는 시도는 실패합니다.

두 번째 방법은 문서 디렉토리를 사용하여 문제를 해결해야합니다.

[자체 setNeedsDisplay]가 작동하지 않는 이유를 모르지만이 문제와 관련이없는 것 같습니다.

NSMutableData *data = [NSMutableData alloc]; 

가되어야한다 :

NSMutableData *data = [[NSMutableData alloc] init]; 

당신은 또한 saveDataToDisk 방법의 끝에서 아카이버를 해제해야

내가 코드에서 발견 한 오류가 있습니다.

+0

고마워,하지만 내 문제는 내가 pathToDataFile 함수를 변경하면 내보기를 제대로 표시 할 수 없습니다, 내가 쓰는 drawRect 함수로 실행할 수 없습니다. – cgha

관련 문제