단일 nsmutabledictionary를 plist로 저장합니다
-
19-09-2019 - |
문제
나는 하나의 사전이 있습니다. Palettedictionary는 항상 nil을 반환합니다.
- (void)saveUserPalette:(id) sender
{
[paletteDictionary setObject:matchedPaletteColor1Array forKey:@"1"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"];
// write plist to disk
[paletteDictionary writeToFile:path atomically:YES];
}
나는 다음과 같은 다른 관점에서 데이터를 다시 읽고 있습니다.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"];
NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:path];
if(plistDictionary==nil ){
NSLog(@"failed to retrieve dictionary from disk");
}
해결책
시뮬레이터에서 응용 프로그램을 실행하고 다음 경로로 찾아보십시오.
~/라이브러리/응용 프로그램 지원/iPhone 시뮬레이터/사용자/응용 프로그램/{A Guid}/문서
여기서 안내서는 다음과 같은 문자열이 될 것입니다 : 06430A38-AFAC-4C68-8F39-DBD6C81A5AA6 (아마도 마지막 수정 된 폴더 일 것입니다).
userPaletTedata.plist가 있는지 확인하여로드하십시오. 속성 목록 editor.app 일부 데이터가 포함되어 있는지 확인합니다.
또한 사전에서 다음 데이터 유형 만 사용하는지 확인하십시오. 그렇지 않으면 (NSDATA, NSDATE, NSNUMBER, NSSTRING, NSARRAY 또는 NSDICTIONARY) PLIST에 쓰지 않을 것입니다.
디스크에 저장하려는 사전이 PLIST에 유효한지 확인하려면 다음을 시도하십시오.
for (id key in paletteDictionary)
{
NSLog(@"key: %@, value: %@, class: %@", key, [paletteDictionary objectForKey:key], NSStringFromClass([[paletteDictionary objectForKey:key] class]));
}
그것은 당신의 객체 중 하나가 plist의 잘못된 데이터 유형인지를 알려 주어야합니다.
그것이 여전히 도움이되지 않는다면, saveuserpalette가 호출되기 전에 Palettedictionary가 할당되었는지 확인해야합니다.
다른 팁
"matchedpalettecolor1arrray"가 무엇인지 언급 할 수 있습니다. 나는 그것의 커스텀 클래스 객체를 믿는다. 내 지식에 따라 쓰기 가능한 객체는 NSString, NSDate 등이 이미있는 NSCoding을 준수해야하므로 주어진 코드에서는 일부 문자열이 작동 할 때 "MatchedPaletteColor1Array"를 설정합니다.
다음 게시물을보고 객체 NSCoding을 활성화 할 수 있습니다. nscoding을 준수하는 객체는 쓰기가 아닙니다
당신이 그것을 사용하기 전에 할당 (Alloc/Init) palettedictionary를 할당하고 있는지 확인하십시오.