2011-01-26 10 views
1

방금 ​​특정 질문에 대한 검색을했는데 답변이 가까웠지만 대답을 둘러 볼 수는 없으므로 도움이 필요합니다.사전 객체를 NSMutableArray에 추가하려고합니다. 이후 배열이 null을 반환합니까?

JSON 문자열에서 파싱 된 사전 개체 그룹을 배열 (NSMutableArray)로 채우고 싶습니다 ... 사전에있는 JSON 구문 분석 결과를 가져 왔지만 넣으려고하면 내가 NewFinalArray이라고 만드는 오전 년 - 배열 : 그것은 내가 얻을있는 NSMutableArray 및 NSLog (널)에 이러한 개체는 ... 여기에 (일반적인 방법) 내 단계

편집 1입니다. DetailViewController의 viewDidLoad 메소드에 명시된대로 .h 파일에서 선언되고 합성 (그리고 지금은 alloc'd 및 init'd) 된 NSMutableArray입니다. 그것의 내용은 UITableView에 표시됩니다.

-Init DetailViewController에서 일반 NSArray/NSMutableArray를 만들고 내 UITableView에 표시되는 값으로 채우는 데 성공했습니다.

- 사전 시나리오를 통해 검색 할 수있는 JSON 문자열을 통해 표시 할 정보를 받고 있습니다. 나는 아이폰/아이 패드 용 Stig JSON 라이브러리를 사용하고있다. 나는 거기에 문제가 없다.

- 내가 원했던 것은 기존 배열 객체를 가져 와서 (기존 배열에서 반복하여 볼 수있는) 새로운 UITableview에 메뉴 항목을 표시하는 데 사용되는 새로운 Array에 추가하는 것입니다.

  1. 나는 나의 .H 파일에 내 mutableArray을 선언

    @interface blah : ...,...,...{ 
    NSMutableArray *newFinalArray; 
    // other vars and IBOutlets 
    } 
    
    @property (nonatomic, retain) NSMutableArray *newFinalArray; 
    
    // other @property and (IBAction) stuff 
    @end 
    
  2. 그때 내하는 .m 파일에 합성
  3. ... 난 심지어 ALLOC/viewDidLoad에 (그것이 DetailViewController의)

    그것을 inited는
    @synthesize this,that, newFinalArray; // keep track of newFinalArray, that's the one I want 
    
    - (void)viewDidLoad { 
        // other code 
        [[newFinalArray alloc] init]; // ya returns a warning, about not responding to alloc, but whatever (for now) 
        // I also tested of course without having to do that. 
    
  4. newFinalArray를 사용하는 내 메서드에서이 메서드는 자체를 호출하는 재귀 함수입니다. 이 호출 할 때마다, 그것은 (그것을 또는합니까?) 배열에 사전 개체를 추가해야

    -(void)digTree:(NSArray *)array{ 
    
        for (NSDictionary *dictionary in array){ 
         // looping through the array 
         [self newFinalArray addObject:[dictionary]]; 
         // more other code, and somewhere along the way I recurse 
         [self digTree:anotherArray]; 
         } 
    } 
    
  5. 내가 NSLog하려고 할 때 ("내 최종 배열 %의 @입니다"@ newFinalArray을) 내가 할 (널 (null)).

나는 아마도 여기에 뭔가 빠져 있습니다. 끝에 "nil"을 추가하려고했습니다. 저는 약간 새로운/녹색이에요. 누군가가 손을 빌려서 newFinalArray에 이러한 사전 객체를 채우는 방법을 알려 주면 가장 감사하겠습니다.

+5

경고 : 특히 주변에 문제가있는 경우에는 "예, 무엇이든간에"경고를하지 마십시오. 확율은 좋은 (이 경우와 같이) 그것은 실수의 방향으로 바로 향하고 있습니다. 많은 전문가들은 컴파일러 플래그를 사용하여 경고를 하드 오류로 처리하므로 무시할 수 없습니다. – Chuck

+0

(나는 결코 그 경고가 내 질문과 관련 있다고 생각하지 않는다.) 그러나 알림을 주셔서 감사합니다. – djeddiej

+1

예, 글쎄 그것은 매우 관련이 있습니다. 코드가 그 라인과 함께 작동하지 않을 수도 있습니다. ! –

답변

5

내가 그 잘못 통지 우선, 그것이 있어야입니다 :있는 viewDidLoad에서

newFinalArray = [[NSMutableArray alloc] init]; 

. 문제가 해결되는지 확인하십시오. 다른 것들도 잘못되어있는 것처럼 보이므로, 경고를 켜고 컴파일러가 힌트를 위해 경고하는 것을 보도록하십시오.

사전은 어떻게 저장됩니까? 이것을하기위한 대안/아마도 더 쉬운 방법은 아마 arrayWithObjects :를 사용하는 것입니다. 또한 addObject :를 사용할 때 nil을 추가 할 필요가 없습니다 (사실 에 nil을 추가 할 수 없습니다).

+0

빠른 응답에 감사드립니다. 방금 시도했는데 아무 것도 반환하지 않았습니다 ... 조금 더 질문을 수정하겠습니다. – djeddiej

7

[[newFinalArray alloc] init];

은 다음과 같아야합니다

newFinalArray = [[NSMutableArray alloc] init];

이 줄은 잘못 너무 :

[self newFinalArray addObject:[dictionary]];

그것은해야한다 :

+0

안녕하세요, 감사합니다. @brainfeeder. newFinalArray가이 클래스의 멤버 인 경우 "자체"참조가 잘못된 것은 무엇입니까? – djeddiej

+0

@djeddiej 구문이 올바르지 않습니다. '[self newFinalArray]'또는'self.newFinalArray' (점 표기법 구문)이어야합니다. 'self'를 사용하면 실제로 속성을 호출한다는 것을 알아 두십시오 (예를 들어, C++에서'this'와 같지 않습니다). – pt2ph8

관련 문제