문제

나는 하나의 사전이 있습니다. 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를 할당하고 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top