2015-04-19 40 views
0

我目前做這樣的事情如何檢查鍵值對的NSDictionary而不使其崩潰?

NSDictionary *imageDataDictionary = nil; 
imageDataDictionary = (NSDictionary *)metadataItem.value; 
if(imageDataDictionary != nil) 
{ 
    if ([imageDataDictionary objectForKey:@"data"] != nil) <---Crashes 
    { 
    } 
} 

應用崩潰的

if ([imageDataDictionary objectForKey:@"data"] != nil) 

,因爲它有0鍵值對。 我想知道什麼的正確方法是檢查是否NSDictionary中是有效的,如果有任何鍵值對

這是消息

2015-04-19 15:56:37.255 MBlast[61278:2115186] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x7c16a7e0' 
+0

它不會在這種情況下崩潰https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/index.html #// apple_ref/occ/instm/NSDictionary/objectForKey:另外,你不需要檢查imageDataDictionary爲零,它將在沒有它的情況下工作 – creker

+2

崩潰說了什麼? – NobodyNada

+0

我敢打賭,'metadataItem.value'不是一本字典。 – Kevin

回答

2

您是鑄造未指定類型的對象一個NSDictionary。這告訴編譯器「相信我,這是一本字典。」

如果對象不是字典,你會崩潰。這幾乎可以肯定這裏發生了什麼。添加一些錯誤檢查:

if (![mediadataItem.value isKindOfClass: [NSDictionary class]]) 
    return; //The object isn't a dictionary. Bail. 
NSDictionary *imageDataDictionary; 
imageDataDictionary = (NSDictionary *)metadataItem.value; 
if(imageDataDictionary != nil) 
{ 
    if ([imageDataDictionary objectForKey:@"data"] != nil) <---Crashes 
    { 
    } 
} 
+0

是的,它不是一本字典。謝謝 – Rajeshwar

+0

@Rajeshwar - 例外的消息告訴你,它不是一本字典,如果你打算看看它。 '[__NSCFData objectForKey:]:無法識別的選擇器' –

相關問題