无法使用addObject来处理NSMutableArray

时间:2012-12-04 22:54:59

标签: objective-c ios xcode

我正在尝试将UIButton对象添加到数组中,但是他们没有这样做。每当我调用[pixels count]或[colors count]时它返回0.我尝试使用[self.arrayName addObject:myObject]和[arrayName addObject:myObject],但似乎都不起作用。我对Objective-C很陌生,所以我可能看起来很愚蠢,但这已经让我困扰了一个多小时。

以下是ViewController.h的代码

 #import <UIKit/UIKit.h>

 @interface ViewController : UIViewController {
 NSMutableArray *pixels;
 NSMutableArray *colors;
 }
 @property (nonatomic, retain) NSMutableArray *pixels;
 @property (nonatomic, retain) NSMutableArray *colors;
 @end

以下是ViewController.m的相关代码

 int x = 30;
 int y = 60;
 for(int i=0; i<10; i++ ) {
      UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x,y,20,20)];
      [self.pixels addObject:button];
      x += 20;
      y += 20;
 }

我将整个项目压缩,可在此处下载: http://mdl.fm/pixelated.zip

提前感谢任何可以提供帮助的人!

2 个答案:

答案 0 :(得分:4)

尝试在尝试使用数组之前尝试添加此内容:

NSMutableArray *pixels = [[NSMutableArray alloc] init];

Obj-C中的数组需要在使用前初始化。由于在nil实例上调用方法只是在Obj-C中返回零,所以很容易做到这一点,直到你的数组没有存储你认为它应该存储的内容时才会注意到。

编辑以添加评论信息:

您可以将初始化放入-ViewDidLoad方法,以便在ViewController本身准备就绪后准备就绪。确保你retain他们,所以他们不会自动垃圾收集。

答案 1 :(得分:2)

您在init方法中初始化了像素 - 没有为您在故事板中设置的控制器调用init。将其更改为initWithCoder:或将数组初始化移至viewDidLoad。