我可能会根据我的情况错误地表达问题 - 如果是这种情况,请对不起。
问题出现了:在我的应用程序的先前版本中,我使用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而不会抛出错误?
答案 0 :(得分:4)
只需将未归档的对象存储为id
,然后使用isKindOfClass:
检查其类:
id unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:codedData];
if ([unarchivedObject isKindOfClass:[NSArray class]]) {
// do something
} else if ([unarchivedObject isKindOfClass:[NSDictionary class]]) {
// do something else
}