2010-03-23 4 views
9

나는 plist에 NSDictionary를 쓰려고하는데 plist를 열었을 때 아무런 데이터도 쓰여지지 않았다. 로그에서 내 경로가 올바르게 보이고 코드가 꽤 표준입니다. 아이디어가 있으십니까?내 애플 리케이션 번들에서 plist에 NSDictionary 쓰기

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

for (id key in dictionary) { 
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]); 
} 

NSString *path = [[NSBundle mainBundle] pathForResource:@"FormData" ofType:@"plist"]; 
NSLog(@"path:%@", path); 

[dictionary writeToFile:path atomically:YES]; 

답변

24

Johan이 맞습니다. 앱 번들을 수정할 수 없습니다. 사전을 저장할 위치에 대한 두 가지 좋은 옵션이 있습니다. 문서 디렉토리는 사용자가 장치를 동기화 할 때 iTunes에 의해 백업됩니다. 또는 캐시되지 않은 캐시 디렉토리에 저장하십시오. 데이터를 백업 할 필요가 없으면 캐시에 저장하여 동기화 속도를 늦추지 마십시오. 다음과 같은 디렉토리 경로를 얻을 수 있습니다.

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
+3

+1 – alesplin

+1

문서 공유가 존재하기 때문에 추가 정보가 필요하다고 생각합니다. Apple에서 "파일을 사용자와 공유하지 않으려면 응용 프로그램의 라이브러리 디렉토리에 저장하고 표준 라이브러리 하위 디렉토리가 적절하지 않으면 라이브러리 디렉토리에 개인 디렉토리를 만들고 사용자에게 그런 다음 해당 디렉토리를 사용하여 응용 프로그램에 전용 인 모든 파일을 저장할 수 있습니다. " –

5

앱의 번들에 쓸 수 없기 때문에 저장되지 않습니다. 예를 들어, 문서 폴더에 파일을 저장하십시오.