2014-02-20 31 views
-2

我收到運行時錯誤。「[__NSCFDictionary isEqualToString:]:無法識別的選擇器發送到實例」錯誤,但實際上未調用方法

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x10b312190' 

的唯一地方我已經調用的方法是isEqualToString在評價和控制流是很好的是,視圖控制器,其中方法調用的。

我已經清理了很多次該項目並從模擬器中刪除了該應用程序。

我是iOS開發新手,似乎有辦法精確地找到哪一行代碼會產生運行時錯誤。它看起來發生在這個代碼塊中,這個代碼塊是從視圖控制器展開後執行的,調用isEqualToString:在任何情況下都在註釋中!

if ([_expenseDictionary objectForKey:@"Type"]!=[NSNull null]) 
{ 
    NSLog(@"Type: %@",[_expenseDictionary objectForKey:@"Type"]); 
    _type_subTypeCellDetailTextLabel.text = [_expenseDictionary objectForKey:@"Type"]; 
} 

破發點,顯示該錯誤線發生......

_type_subTypeCellDetailTextLabel.text = [_expenseDictionary objectForKey:@"Type"]; 

我只是不明白爲什麼。請幫助我。

+0

要比較兩個對象,最好使用isEqual方法。 – rounak

+0

''isEqualToString'似乎在'UILabel''文本賦值期間被'UIKit'內部調用。 – Geri

回答

1

您的_expenseDictionary中的NSDictionary在關鍵字@"Type"之下,就像它讀取一樣。你必須修改這些代碼部分。這些代碼很好。

isEqualToString似乎在內部被UIKit調用UILabeltexttext設置。

無論如何您都可以在設置之前通過檢查NSStrings來解決它。

id value = [_expenseDictionary objectForKey:@"Type"]; 
if ([value isKindOfClass:[NSString class]]) 
{ _type_subTypeCellDetailTextLabel.text = value; } 
0

從另一個ID,我設法恢復答覆...

所以現在事實證明,調用選擇器isEqualToString:是隱式API調用。就像我說的,我沒有在任何地方撥打電話。

問題原來是這樣的,而不是用一個字符串設置鍵「Type」的值,我意外地將字典(不同於_expenseDictionary)分配給鍵。隱式調用是由字典'接收'而不是預期的字符串。在設置「key」類型的正確值(NSString)時進行更正解決了問題。

相關問題