2012-06-20 42 views
1

我一直有一個很奇怪的問題。我有一個可變數組,聲稱是可變的,並聲稱對addObject:作出響應,但崩潰說它不可變。iOS - 可變陣列問題?

下面是代碼:

NSLog(@"Can add object: %d", [[MySingleton sharedInstance].myArray respondsToSelector:@selector(addObject:)]); 
if([[MySingleton sharedInstance].myArray isKindOfClass:[NSMutableArray class]])[[MySingleton sharedInstance].myArray addObject:objectToAdd]; 
else NSLog(@"Not mutable"); 

現在,如果我將其設置爲可變的副本,它的工作原理。

NSLog(@"Can add object: %d", [[MySingleton sharedInstance].myArray respondsToSelector:@selector(addObject:)]); 
if([[MySingleton sharedInstance].myArray isKindOfClass:[NSMutableArray class]])[[MySingleton sharedInstance].myArray.mutableCopy addObject:objectToAdd]; 
else NSLog(@"Not mutable"); 

這是爲什麼?它爲什麼聲稱是可變的,並且能夠添加對象:,但除非我使用可變副本,否則會崩潰?

+1

http://stackoverflow.com/questions/1096772/is-it-safe-to-use-iskindofclass-against-an-nsstring-instance-to-determine-type – GendoIkari

+0

哦。出於某種原因,我有兩個倒退。我認爲是MeMemberOfClass是不安全的。我只想知道它爲什麼說它響應選擇器。這不僅僅是爲了實例化,而不是類的類型? – RileyE

+0

或者我必須要用戶instancesRespondToSelector:? – RileyE

回答

0

我希望這應該更好一些。也許如果我寫得夠多的話,這將作爲現在的適當答案來通過。答案在主帖的評論中。我需要檢查isMemberOfClass來檢查它是否繼承了類方法,而不是檢查它是否屬於某個類類型,因爲它是可變的,但沒有繼承可變方法。