2012-06-20 6 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"); 

왜 그렇습니까? 왜 그것은 변경 가능하고 addObject : 할 수 있다고 주장하지만 변경 가능한 사본을 사용하지 않으면 충돌이 발생합니까?

+1

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

+0

오. 웬일인지 나는 뒤의 2 개를 가지고 있었다. 나는 isMemberOfClass가 안전하지 않다고 생각했다. 나는 그것이 그것이 선택 자에 반응한다고 말하는 이유를 알고 싶다. 클래스의 유형이 아니라 인스턴스화를 위해서입니까? – RileyE

+0

또는 사용자 instancesRespondToSelector :를 사용해야합니까? – RileyE

답변

0

조금 더 잘 작동 할 것입니다. 어쩌면 내가 글을 쓴다면, 지금 당장은 적절한 대답으로 올 것입니다. 대답은 주요 게시물의 의견에 있습니다. 클래스 메쏘드를 상속 받았는지 확인하기 위해 isMemberOfClass를 체크 할 필요가있었습니다. 특정 클래스 유형인지를 검사하는 것이 아니라 변경 가능하기 때문에 변경 가능한 메쏘드를 상속하지 않았기 때문입니다.