根據(jù)報錯調(diào)用的方法名, 可能某個對象被當作另一個對象使用了
1.instance對象過早的釋放掉了,指針雖然還是指向那塊內(nèi)存地址,但內(nèi)存實際已經(jīng)被釋放掉了,自然也就無法識別方法了。解決方法:如果是instance是屬性的話,首先確認訪問修飾符是否正確,比如該用copy的地方錯用了retain等;如果不是的話,那就沒啥好辦法了,加斷點,一步步查看源碼,看是否多了release,對于每一次instance調(diào)用的地方,都打印其內(nèi)容。
2.該對象沒有這個方法,檢查一下方法參數(shù)跟調(diào)用該方法時參數(shù)是否匹配(尤其注意該方法的.h文件和.m文件中的方法聲明是否一致。我就由于粗心大意,.m文件中方法名寫錯一個字母,造成.h文件中聲明的方法實際調(diào)用時,找不到該方法的具體實現(xiàn))。
例子:
-[UIView setSelected:]: unrecognized selector sent to instance 0x7ff3f35b1070
可能是誤將uiview當UIButton使用,調(diào)用了setSelected
注:Person為NSObject
-[Person length]: unrecognized selector sent to instance 0x7ff3f35b1070
錯誤將Person當做NSString來使用,比如
id obj = [[Person alloc] init];
NSString *string = obj;
string.length;
-[Person count]: unrecognized selector sent to instance 0x7ff3f35b1070
誤將Person當數(shù)組使用
id obj = [[Person alloc] init];
NSArray *array = obj;
array.count;
-[Person setObject:forKeyedSubscript:]: unrecognized selector sent to instance 0x7ff3f35b1070
錯誤將Person當做NSMutableDictionary來使用