【问题标题】:trying to add dictionary objects to an NSMutableArray - afterward array returns null?试图将字典对象添加到 NSMutableArray - 之后数组返回 null?
【发布时间】:2011-06-16 01:03:38
【问题描述】:

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

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

编辑 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
    
  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 (@"my final array is %@", newFinalArray) 时,我得到 (null)。

我可能在这里遗漏了一些东西。我试图在最后添加“nil”。我对此有点新/绿色,所以如果有人可以伸出援助之手,让我知道如何用这些字典对象填充我的 newFinalArray,我将不胜感激。

【问题讨论】:

  • 只是一个提示:永远不要“是的,无论如何”警告,尤其是当您在附近遇到问题时。很有可能(在这种情况下)它正指向你错误的方向。许多专业人士使用编译器标志将警告视为硬错误,因此他们不能忽略它们。
  • (我从来不这样做,只是我不相信警告与我的问题有关),但感谢提醒:)
  • 是的,这是非常相关的 :) 代码不可能按原样使用该行!
  • 先修复所有警告,然后提出问题。

标签: iphone objective-c ipad nsmutablearray nsdictionary


【解决方案1】:

[[newFinalArray alloc] init];

应该是:

newFinalArray = [[NSMutableArray alloc] init];

这行也是错的:

[self newFinalArray addObject:[dictionary]];

应该是:

[newFinalArray addObject:dictionary];

【讨论】:

  • 嗨,感谢您的回复@brainfeeder。如果 newFinalArray 是此类的成员,那么“self”引用有什么问题?
  • @djeddiej 语法不正确。它应该是[self newFinalArray]self.newFinalArray(点符号语法)。请注意,使用 self 实际上是在调用一个属性(例如,它与 C++ 中的 this 不同)。
【解决方案2】:

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

newFinalArray = [[NSMutableArray alloc] init];

在 viewDidLoad 中。看看能不能解决。看起来还有其他问题,所以打开警告,看看编译器还会警告你什么提示。

字典是如何存储的?另一种/可能更简单的方法可能是使用 arrayWithObjects:。另外,使用addObject:时,不需要加nil(其实你不能加nil)。

【讨论】:

  • 感谢您的快速响应。我刚刚尝试过,但没有返回任何内容...我将再编辑一下问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多