2009-12-01 5 views
51

내보기 컨트롤러 .h 파일에 NSMutableArray *categories을 선언하고 해당 속성을 선언했습니다. 내하는 .m 파일의 NSXMLParser 대표의 parser:foundCharacters: 방법에서NSMutableArray addObject가 작동하지 않습니다.

,이 코드가 있습니다

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string 
{ 
    if (elementFound) 
    { 
     element = string; 
     [self.categories addObject:element]; 
    } 
} 

을하지만 디버그 모드에서 그것으로 스테핑 후 [self.categories addObject:element] 선 위로 마우스를 가져 가면, 엑스 코드 나야 알려줍니다 크기는 0x0, 0 개체입니다. XML 파일에는 3 개의 요소가 있으므로 3 개의 항목이 배열에 있어야합니다.

나는 정말 분명한 것을 놓치고있어 무엇을 알아 내지 못하니.

+3

앞으로 올리려면 코드를 포맷하는 방법은 코드 블록을 선택하고 포스트 편집기 맨 위에있는 "코드"포맷터 버튼을 사용하여 4 칸 모두 들여 쓰기를하는 것입니다. –

+0

죄송합니다 - 다른 포럼에서 복사하여 붙여 넣으 셨습니다. 형식을 제대로 모르겠습니다. 덕분에 – joec

답변

140

"0x0"부분은 메모리 주소입니다. 특히, "nil"은 변경 될 수있는 배열이 호출 될 때 존재하지 않는다는 것을 의미합니다. 당신의 처음 방법으로 그것을 창조하십시오 :

categories = [[NSMutableArray alloc] init]; 

-dealloc에서 그것을 놓으십시오.

+11

나는 왜 이것을 잊어 버리는 지 모르겠다. 감사. – James

+17

(2012 업데이트 : ARC를 사용하는 경우 release/dealloc 부분은 무시할 수 있습니다.) –

+4

감사합니다! Objective-C에서 객체 참조가없는 메시지가 실패하지 않는다는 사실을 쉽게 잊을 수 있습니다. – JasonD

6

때문에 공개 할 필요 오토 릴리즈되지

categories = [NSMutableArray array]; 

배열 클래스 메소드를 사용하여 빈 배열을 초기화합니다.

+0

Vishu - 당신의 솔루션이 효과적이지만, Joshua Nozzi의 솔루션은 메모리가 덜 필요하기 때문에 더 좋다고 생각합니다. –

+0

이것은 alloc/init 대신에 편리한 메소드를 사용하는 것만으로도 5 년 6 개월 만에 응답 한 것과 기능적으로 같습니다. 메모리 사용량에는 차이가 없으며 결과는 정확히 동일합니다. –

-2
@property (Strong, nonatomic) NSMutableArray * yourArray; 

당신은 강한을 사용해야합니다.

+0

이것은 질문에 대답하지 않습니다 - 배열이 초기화되지 않았으므로 존재하지 않습니다 (그래서 nil입니다). 또한,'strong'는 ObjC 2 프로퍼티의 기본값이지만 주어진 코드에서 선언 된 방법에 대해서는 알지 못합니다; 우리가 알고있는 모든 것은 런타임에 존재하지 않으며 클래스의 ivar 인 것처럼 보입니다. 그래서 우리는 문제가 있다는 것을 알기 때문에 메서드가 호출 될 때 어떤 배열도 할당되지 않습니다. init *시에 생성되어 다른 곳에서 삭제되었을 수도 있습니다. 제 대답은이 가정이 많은 가정을하고 매우 모호하다는 것입니다. 내가 오래 전에 받아 들여진 대답에 그것이 무엇을 더하고 있는지는 알 수 없다. –

관련 문제