2011-10-13 4 views
0

간단한 응용 프로그램 설정을 저장하고 plist를 사용하도록 선택해야합니다.plist에 데이터를 영구 저장하는 방법

stackoverflow 및 기타 리소스를 검색 한 후 가장 많이 사용되는 패턴은 사전을 사용하여 읽고 쓰는 것입니다. 그래서 앱 구성 데이터를 plist에 저장하려고 시도하지만 영구 저장되지는 ​​않습니다. plistfile 값 :

버튼 "저장 설정" writeToFile 후

- (IBAction) saveButtonTapped 
{ 
    NSString *plistfile = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"]; 
    NSMutableDictionary *dict =[NSMutableDictionary dictionaryWithContentsOfFile:plistfile]; 
    [dict setValue:initialURL.text forKey:@"initialURL"]; 
    [dict writeToFile:plistfile atomically:YES]; 
} 

(물론은 "initialURL"키와 "config.plist"파일이) 구현 코드입니다 initialURL이라는 UITextField에 쓰여진 것은 오른쪽 키에 쓰여지고 동일한 키를 다시로드하면 업데이트 된 값이 반환됩니다.하지만 응용 프로그램을 종료하고 다시 시작하면 initialURL의 값이 손실됩니다.

왜 이런 일이 발생합니까? "writeToFile"이 실제로 파일에 쓰는 것을 예상하는 데있어 잘못된 점이 있습니까 (파일의 경우 영구적으로 저장되는 파일에 영구히 저장됩니다). 이 구성 설정과 그와 같은을의 경우

프란체스코

답변

1

변경

[dict setValue:initialURL.text forKey:@"initialURL"]; 

[dict setObject:initialURL.text forKey:@"initialURL"]; 

에 또한 당신이 당신의 번들에 쓸 수 없습니다, 당신은 응용 프로그램의 문서 폴더에 파일을 복사해야합니다.

+0

에 당신이 간략하게 설명하면 "... 파일을 복사"무엇을 의미합니까시겠습니까? – kranz

+0

http://stackoverflow.com/questions/1132005/iphone-copying-a-file-from-resources-to-documents-gives-an-error. 이는 런타임시 번들을 변경할 수 없기 때문에 번들에서 파일에 액세스하기 때문입니다. – jbat100

+0

나는 이제 네가하는 말을 이해한다고 생각한다. 파일과 응용 프로그램의 문서 폴더를 다루는 방법을 배우기 위해 몇 가지 리소스를 가르쳐 주시겠습니까? 고마워요 많이 – kranz

0

앱이 처음 실행될 때 config.plist를 Documents 폴더에 복사하십시오.

NSString *plistfile = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"]; 
NSString* documentPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
[NSFileManager defaultManager] copyItemAtPath:plistfile toPath:documentPath error:nil]; 

다음 액세스

- (IBAction) saveButtonTapped 
{ 
    NSString *plistfile = [[NSBundle bundleWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]] pathForResource:@"config" ofType:@"plist"]; 
    NSMutableDictionary *dict =[NSMutableDictionary dictionaryWithContentsOfFile:plistfile]; 
    [dict setValue:initialURL.text forKey:@"initialURL"]; 
    [dict writeToFile:plistfile atomically:YES]; 
} 
관련 문제