2010-06-07 89 views
0

我知道这个问题已经在过去被问过,但我真的很困惑,无法摆脱它。NSMutableArray充满了指针

我有9个指针IB对象声明如下:

IBOutlet中的UIButton * but1;

IBOutlet UIButton * but2;

....

NSMutableArray * buttons;

声明的属性:

@属性(非原子,保留)IBOutlet中的UIButton * but1;

@property .....

在IB我已经为指针从按钮的连接。

我现在需要填充这些指针数组按钮运行像的UIButton方法

[[按钮objectWithId:0] setImage:[UIImage的imageNamed:@ “image1.png”]];

我知道我不能用指针填充数组,有没有办法让IBOutlets进入数组?

+0

解决: 我initNibWithName下添加对象,改为viewDidLoad中,大概按钮都尚未初始化 – 2010-06-07 13:45:13

回答

0

您推翻问题。默认情况下,所有对象的引用都是指针。

此:

IBOutlet UIButton *but1; 

...定义一个指针。

因此,对象的所有默认操作都使用指针。你通常不必考虑它。要一个指向一个UIButton添加到NSMutableArray中只使用(注意self符号):

[self.buttons addObject:self.but1]; 

的IBOutlet中指定尚未在代码引用的影响。它只是在那里,所以Interface Builder可以解析源代码并找出哪些属性应该注意。否则,它什么都不做,你可以忽略它。

当然,我不得不问:为什么你将已命名属性的按钮放入数组中?

取而代之的是:

[[buttons objectWithId:0] setImage:[UIImage imageNamed:@"image1.png"]]; 

...为什么不这样做呢?

[self.but1 setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal]; 

如果不使用名称作为主要参考,那么使用命名属性没什么意义。

+0

当然,如果我只有一个按钮,我会像你所建议的那样做。事实是,我不想让代码冗长而难以阅读,因此用数组管理按钮就是我想要做的事情。 你的想法很棒,会帮助我很多,但是如果我错过了属性,我不能将IB对象链接到代码,那就是为什么我要声明9次对象! – 2010-06-07 14:45:37

1

你不能用任意指针填充Cocoa容器,但指向类类型对象的指针 - 比如你的UIButton s - 都可以。
可可容器保留并释放添加到它们的对象,因此指向类型的指针必须用例如NSValue

另请注意,IBOutlet不是类型,它是一个空的宏,仅用于标记Interface Builder的代码部分。

+0

好,我知道,但我仍然不知道如何解决我的问题,我应该怎么插入数组来获得它的工作? – 2010-06-07 13:28:25