2010-07-15 4 views
2

내 앱의 일부 설정을 닫으면 plist 파일에 저장하려고 시도하고 앱이 시작될 때로드하려고합니다. 나는 NSArray 배열에 저장된 4 숫자가 있습니다. 파일을 변경하면 파일이 변경된 방식으로 앱이 시작되므로 로딩이 정상적으로 작동합니다.NSArray writeToFile returns "is deprecated"- iPhone SDK

이 코드는 잘 작동 :

- (void)LoadSettings { 
NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation]; 
NSArray *array = [[NSArray alloc] initWithContentsOfFile:finalPath]; 
clockFaceImageSlider.value = [[array objectAtIndex:0] integerValue]; 
HourTypeSwitch.on = [[array objectAtIndex:1] integerValue]; 
touchRotationSwitch.on = [[array objectAtIndex:2] integerValue]; 
accelerometerRotationSwitch.on = [[array objectAtIndex:3] integerValue]; 
} 

이 코드는 저장 라인까지 작동합니다

- (void)SaveSettings { 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation]; 
    NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:clockFaceImageSlider.value], [NSNumber numberWithInt:HourTypeSwitch.on], [NSNumber numberWithInt:touchRotationSwitch.on], [NSNumber numberWithInt:accelerometerRotationSwitch.on], nil]; 

    if (![array writeToFile:finalPath atomically:YES]) { 
     NSLog(@"error"); 
    } 
    //The log does print error 
} 

아무도 내가이 PLIST에 저장할 수있는 방법을 알고 있나요?

~ 감사

답변

2

그것은 문자 인코딩을 정확히 설명하지 않는다. 누가 description을 사용하라고 했습니까? 그 사람/책은 처벌해야합니다 ...

그렇다면, 단지 몇 가지 항목을 저장하고 싶다면 NSUserDefaults을 사용하는 것이 더 쉽습니다 (here 참조). 그럼 당신이해야 할

[[NSUserDefaults standardUserDefaults] setObject: ... forKey:@"..."] 

하고 프레임 워크는 디스크에 저장하는 장면 뒤에 PLIST 경로를 준비에 이르기까지 모든 작업을 수행합니다.

+0

고마워. 저장하는 값은 4 개뿐입니다. –

4

망가 쓰기 배열의 설명있는 NSString, 단지 대신 배열 쓰기 :

[array writeToFile:finalPath atomically:YES]; 

아니면 문자열을 원하는 경우 인코딩 유형 행선지 사용해야을

NSError *error; 
[[array description] writeToFile:finalPath atomically:YES encoding:NSUTF8StringEncodingerror:&error]; 

하지만,이 plist를 쓰지 않을 것이다. 대신

[array writeToFile:finalPath atomically:YES]; 

NSStringwriteToFile:atomically:가되지 않습니다 이유에서와 같이 NSArray의 (AN NSString 임) description을 복용하고 단지 NSArray 자체의 writeToFile:atomically를 사용하여 파일에 쓰기의

+0

빠른 답장을 보내 주셔서 감사합니다. 더 이상 오류가 발생하지 않지만 저장하지는 않습니다. 확인을 위해 코드를 수정하여 저장하고 오류 메시지를 반환합니다. 내 질문을 업데이트했습니다. –

+0

당신은 당신의 문서 디렉토리에 파일을 써야합니다. 그것이 당신이 허락 한 유일한 장소입니다. NSString * documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent : @ "Documents"]]; 물건을 저장하려는 폴더입니다. – nacho4d

+0

감사합니다. –