2011-10-07 1 views
29

__NSArrayI 및 __NSArrayM은 무엇입니까?__NSArrayI 및 __NSArrayM은 무엇입니까? NSArray로 변환하는 방법은?

__NSArrayI (또는 M)은 "인식 할 수없는 선택기"오류를 발생시킵니다.

NSArray로 변환하는 방법?


json, twitter api를 구문 분석하도록 테스트했습니다.

http://api.twitter.com/1/followers/ids.json?cursor=-1&screen_name=twitterapi

는 ==> 잘 작동합니다. 파싱 ​​된 객체는 NSCFDictionary 클래스입니다. 는

http://api.twitter.com/1/statuses/user_timeline.json?&screen_name=twitterapi

==> 에러 (이 사전 __NSArrayM 클래스를 포함). 파싱 ​​된 객체는 __NSArrayM 클래스입니다.

+2

후 당신에게 오류를 제공 코드 :

여기 당신은 둘의 짧은 조회를 볼 수 있습니다. – Vladimir

+2

__NSArrayI => 변경 불가능한 NSArray __NSArrayM => 변경 가능 NSArray –

+1

또한 취소되지 않은 선택자 메시지를 게시합니다. – JeremyP

답변

70

__NSArrayI됩니다 - 즉, NSArray는 "일반"하는 너는 바꿀 수 없다.

__NSArrayM은 가변 배열의 코드 워드입니다 (즉, NSMutableArray). NSMutableArray에서 항목을 추가하고 제거 할 수 있습니다.

+7

니스 -이 지식을 어디에서 찾을 수 있습니까? 런타임 소스를 직접 읽는 것만으로? 또는 어딘가에 문서가 있습니다. – sean

+2

이름은 좋은 단서입니다 (배열의 문맥에서 "M"과 "I"는 많이 있지만 변경 가능하고 변경할 수 없음). –

+0

@ Catfish_Man six –

1

개인 클래스입니다. 당신은 그들에게 접근하거나 그들을 변환하고 싶지 않아야합니다.

내가 실수하지 않는다면 NSArray_NSArray의 하위 클래스입니다.

당신은 추가하는 경우 /는 가변 타입 인 것을 배열 검사로/일부 개체를 제거 : 코드 워드는 불변의 배열 NSMutableArray

4

이들은 개인 API 클래스입니다. 거기에 is a project 당신은 개인 API의 모든 클래스를 볼 수 있습니다. 당신은 app store에 대한 애플 리케이션 내에서 그들을 사용할 수 없습니다하지만 때로는 너무 개체를 액세스하는 방법과 그것이 어떤 종류의 개체를 참조하십시오 유용합니다. 그들은 개종 할 수 없다. 내 생각에, 디버거 내부에서 이러한 종류의 객체를 얻는 것은 프로젝트 내부에서 사용하는 클래스의 내부 클래스를 나타내는 것일뿐입니다. 어떤 종류의 클래스인지 알면 코드 내에서 문제를 찾을 위치를 이해할 수 있습니다.

__NSArrayI

enter image description here

__NSArrayM

enter image description here