簡體   English   中英

如何確定plist是否包含NSDictionary或NSMutableArray?

[英]How to determine if plist contains NSDictionary or 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還是NSM​​utableArray,而不會引發錯誤?

只需將未歸檔的對象存儲為id ,然后使用isKindOfClass:來檢查其類:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM