2012-03-30 4 views
2

내 상황에 따라 질문을 잘못 말하고있는 것 같습니다. 죄송합니다.plist에 NSDictionary 또는 NSMutableArray가 포함되어 있는지 확인하는 방법은 무엇입니까?

다음과 같은 문제가 있습니다. 이전 버전의 응용 프로그램에서는 NSCoding을 사용하여 NSMutableArray를 plist에 저장합니다.

새 버전에서는 설정 데이터를 추가 했으므로 NSDictionary에 이전 배열과 새 데이터를 넣은 다음 NSCoding을 사용합니다. 잘 작동합니다.

그러나이 릴리스에서는 기존 plist가 이전 버전 (NSMutableArray)인지 새 버전 (NSDictionary)인지 확인해야합니다.

NSData *codedData=[[NSData alloc] initWithContentsOfFile:plistPath]; 
//EITHER this (array): allMsgs=[NSKeyedUnarchiver unarchiveObjectWithData:codedData]; 
//OR this (nsdict):  tmpdict=(NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:codedData]; 

가 어떻게이 PLIST를 읽고 오류를 던지고하지 않고있는 NSDictionary 나있는 NSMutableArray를인지 확인할 수 있습니다

기본 코드는 무엇입니까?

답변

4

그냥 그 클래스를 확인하기 위해 다음에, id으로 아카이브되지 않은 객체를 저장 isKindOfClass:를 사용

id unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:codedData]; 
if ([unarchivedObject isKindOfClass:[NSArray class]]) { 
    // do something 
} else if ([unarchivedObject isKindOfClass:[NSDictionary class]]) { 
    // do something else 
} 
+0

완벽을! 고맙습니다. 나는 가능한 한 빨리 대답을 확인할 것이다. (5 분 기다려야한다.) – wayneh

+0

위대한 답. 플랫폼 모범 사례에 대해 투표하십시오. – Sam

관련 문제