Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Can';无法让addObject在NSMutableArray上工作_Objective C_Ios_Xcode - Fatal编程技术网

Objective c Can';无法让addObject在NSMutableArray上工作

Objective c Can';无法让addObject在NSMutableArray上工作,objective-c,ios,xcode,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

我正试图将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:UIViewController{
NSMutableArray*像素;
NSMutableArray*颜色;
}
@属性(非原子,保留)NSMutableArray*像素;
@属性(非原子,保留)NSMutableArray*颜色;
@结束
下面是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;
 }
intx=30;
int y=60;

对于(int i=0;i在尝试使用数组之前,请尝试将其添加到中:

NSMutableArray *pixels = [[NSMutableArray alloc] init];
Obj-C中的数组需要在使用前进行初始化。由于在nil实例上调用方法只会在Obj-C中返回零,所以很容易做到这一点,并且在数组没有存储您认为应该存储的内容之前不会注意到

编辑以添加来自评论的信息:


您可以将初始化放入
-viewdiload
方法中,以便在
ViewController
本身就绪后,它们就可以启动了。请确保
保留它们,这样它们就不会被自动垃圾回收。

在尝试使用数组之前,尝试将其添加进来:

NSMutableArray *pixels = [[NSMutableArray alloc] init];
Obj-C中的数组需要在使用前进行初始化。由于在nil实例上调用方法只会在Obj-C中返回零,所以很容易做到这一点,并且在数组没有存储您认为应该存储的内容之前不会注意到

编辑以添加来自评论的信息:



您可以将初始化放入
-viewdiload
方法中,以便在
ViewController
本身准备就绪后,它们就可以启动了。请确保
保留它们,这样它们就不会被自动垃圾收集。

您在init方法中初始化了像素,您设置的控制器不会调用init在情节提要中。将其更改为initWithCoder:或将数组初始化移动到viewDidLoad。

您在init方法中初始化了像素--在情节提要中设置的控制器不会调用init。请将其更改为initWithCoder:或将数组初始化移动到viewDidLoad。

您初始化过数组吗?Wher我会初始化它们吗?我在ViewController.h中尝试过,但它在声明列表的末尾一直说“预期”;。我也在ViewController.m的init()和ViewController.m的viewDidLoad()中尝试过,但都不起作用。对,无目标消息被忽略(NSControl除外)。如果你在这个网站上得到一个有用的答案,你应该单击回答你问题的答案旁边的复选标记。我看到你在4个问题上还没有这样做。也许你还没有得到一个好的答案。这不是问题,我们都需要学习一段时间。但这看起来仍然是一个开放的问题。你需要单击复选标记来回答“我接受这个答案。”你应该在你认为正确的其他问题的答案上这样做。“)你有没有初始化你的数组?我在哪里初始化它们?我在VIEW Controller中尝试过,但是它一直在说“预期”;“在声明列表的末尾。我也在ViewController.m上的init()和ViewController.m上的viewDidLoad()内部尝试了它,但都不起作用。对,忽略了无目标消息(NSControl除外)。如果您在此网站上得到有用的答案,您应该单击回答您问题的答案旁边的复选标记。我看到您在4个问题上还没有这样做。也许您还没有得到好的答案。这不是问题,我们都需要学习一些时间。但这看起来仍然是一个开放的问题。您需要单击复选标记来表示“我接受这个答案。“你应该在你认为正确的其他问题的答案上这样做。”但正如@rdelmar指出的,在哪里做和在哪里做一样重要。你建议把这个放在哪里?如果我把它放在viewDidLoad中,它将只在该方法中可用。我还有一个问题。当我使用[colors addObject:colorObject]时,它会很好地添加到数组中,但它会给我一条警告消息,说“colors”的本地声明隐藏了实例变量”。我可以通过将其更改为[self.colors addObject:colorObject]来消除该错误,但之后它不会添加到数组中。有什么建议吗?感谢您迄今为止的帮助。将数组的名称从“colors”更改为不太可能与其他变量名称冲突的名称。例如,ColorArr.@noname如果将初始化放在-
viewDidLoad
中,并对
像素和
颜色进行赋值(并确保它们被保留),当然,它们可以在其他地方找到。不要合成颜色,在需要该实例变量时调用self.colors。但是正如@rdelmar指出的,在哪里做和在哪里做一样重要。您建议将其放在哪里?如果我把它放在viewDidLoad中,它将只在该方法中可用。我还有一个问题。当我使用[colors addObject:colorObject]时,它会很好地添加到数组中,但它会给我一条警告消息,说“colors”的本地声明隐藏了实例变量”。我可以通过将其更改为[self.colors addObject:colorObject]来消除该错误,但之后它不会添加到数组中。有什么建议吗?感谢您迄今为止的帮助。将数组的名称从“colors”更改为不太可能与其他变量名称冲突的名称。例如,ColorArr.@noname如果您将初始化放在-
viewDidLoad
中,并为
像素和
颜色
IVAR进行赋值(并确保它们被保留),那么它们当然可以在其他地方使用。如果需要该实例变量,请不要合成颜色并调用self.colors。