试图将字典对象添加到NSMutableArray - 后面的数组返回null?

dje*_*iej 1 iphone objective-c nsdictionary nsmutablearray ipad

我刚刚搜索了我的特定问题,虽然答案很接近,但我无法理解答案......所以我需要一些帮助.

我想用一组字典对象填充一个数组(NSMutableArray),这些字典对象是从JSON字符串解析的......我得到的字典部分,我得到的JSON解析,但当我尝试将这些对象放入NSMutableArray和NSLog我得到(null)...这是我的步骤(以一般方式)

编辑1: 我正在创建的数组名为NewFinalArray.它是一个NSMutableArray,在.h文件中声明并合成(现在是alloc'd和init'd),如DetailViewController的viewDidLoad方法中所述.它的内容将显示在UITableView中.

- 在DetailViewController中,我成功创建了一个普通的NSArray/NSMutableArray,并用我的UITableView中显示的值填充它.

- 在新场景中,我收到要通过JSON字符串显示的信息,这些字符串可以通过字典对象检索.我正在为iPHone/iPad使用Stig JSON库.我没有问题.

- 我想要做的是获取现有的字典对象(我可以从现有的数组中查看并查看)并将它们添加到一个新的数组中,用于在我的UITableview中显示菜单项.

  1. 我在我的.h文件中声明了我的mutableArray

    @interface blah : ...,...,...{
    NSMutableArray *newFinalArray;
     // other vars and IBOutlets
    }
    
     @property (nonatomic, retain) NSMutableArray *newFinalArray;
    
     // other @property and (IBAction) stuff
     @end
    
    Run Code Online (Sandbox Code Playgroud)
  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.
    
    Run Code Online (Sandbox Code Playgroud)
  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];
          }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 当我尝试NSLog(@"我的最终数组是%@",newFinalArray)我得到(null).

我可能在这里遗漏了一些东西.我试着在最后添加"nil".我对此有点新鲜/绿色,所以如果有人可以伸出援助之手让我知道如何用这些字典对象填充newFinalArray,那将是非常感激的.

pt2*_*ph8 9

[[newFinalArray alloc] init];

应该:

newFinalArray = [[NSMutableArray alloc] init];

这条线也是错的:

[self newFinalArray addObject:[dictionary]];

它应该是:

[newFinalArray addObject:dictionary];


Mat*_*att 5

我注意到的第一件事是错的,它应该是:

newFinalArray = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

在viewDidLoad中.看看是否能修复它.看起来还有其他问题,所以打开警告,看看编译器还有什么警告提示.

字典是如何存储的?替代/可能更简单的方法可能是使用arrayWithObjects:.另外,使用addObject:时,不需要添加nil(实际上,你不能添加nil).