пытаясь добавить объекты словаря в NSMutableArray - впоследствии массив возвращает ноль? - PullRequest
1 голос
/ 26 января 2011

Я только что нашел свой конкретный вопрос, и хотя ответы на него близки, я не могу найти ответ ... поэтому мне нужна помощь.

Я хотел бы заполнить массив (я полагаю, NSMutableArray) группой объектов словаря, которые анализируются из строк JSON ... часть словаря, которую я получил, синтаксический разбор JSON, но когда я пытаюсь поместить эти объекты в NSMutableArray и NSLog это я получаю (ноль) ... вот мои шаги (в общем случае)

изменить 1: -Массив, который я создаю, называется NewFinalArray. это NSMutableArray, объявленный в файле .h и синтезированный (а теперь alloc'd и init'd), как отмечено в методе viewDidLoad объекта DetailViewController. Его содержимое должно отображаться в UITableView.

- В DetailViewController я успешно создал простой NSArray / NSMutableArray и заполнил его значениями, которые отображаются в моем UITableView.

-В новом сценарии я получаю информацию для отображения через строки JSON, которые можно получить через объекты словаря. Я использую библиотеки Stig JSON для iPHone / iPad. У меня нет проблем там.

-Все, что я хотел сделать, это получить существующие объекты словаря (которые я могу перебрать из существующего массива и посмотреть) и добавить их в новый массив, который будет использоваться для отображения пунктов меню в моем UITableview.

  1. Я объявил свой mutableArray в моем .h файле

    @interface blah : ...,...,...{
    NSMutableArray *newFinalArray;
     // other vars and IBOutlets
    }
    
     @property (nonatomic, retain) NSMutableArray *newFinalArray;
    
     // other @property and (IBAction) stuff
     @end
    
  2. Затем я синтезирую его в своем файле .m ... Я даже размещаю / запускаю его в viewDidLoad (это DetailViewController)

     @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.
    
  3. в моем методе, который использует 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];
          }
     }
    
  4. когда я пытаюсь выполнить NSLog (@ "мой последний массив% @", newFinalArray), я получаю (ноль).

Я, наверное, что-то здесь упускаю. Я пытался добавить "ноль" в конце. Я немного новичок в этом, поэтому, если кто-то сможет протянуть руку и дать мне знать, как заполнить мой newFinalArray этими объектами словаря, это будет очень ценно.

Ответы [ 2 ]

8 голосов
/ 26 января 2011

[[newFinalArray alloc] init];

должно быть:

newFinalArray = [[NSMutableArray alloc] init];

Эта строка также неверна:

[self newFinalArray addObject:[dictionary]];

должно быть:

[newFinalArray addObject:dictionary];

5 голосов
/ 26 января 2011

Первое, что я заметил, что это неправильно, это должно быть:

newFinalArray = [[NSMutableArray alloc] init];

в viewDidLoad.Посмотри, исправит ли это.Похоже, что есть и другие вещи не так, поэтому включите предупреждения и посмотрите, что еще компилятор предупреждает вас о подсказках.

Как хранятся словари?Альтернативный / возможно более простой способ сделать это, вероятно, будет использовать arrayWithObjects :.Кроме того, при использовании addObject: нет необходимости добавлять ноль (фактически, вы не можете добавить ноль).

...