Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Ios UIButtons数组返回错误_Ios_Objective C_Arrays_Ios10 - Fatal编程技术网

Ios UIButtons数组返回错误

Ios UIButtons数组返回错误,ios,objective-c,arrays,ios10,Ios,Objective C,Arrays,Ios10,我有一个UIButton对象的数组(我有5个按钮,所以我想将它们存储在一个数组中以便于处理)。但是Array给我一个错误 “由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“-[\uu NSArray0 addObject:]: 无法识别的选择器已发送到实例“ 我在viewDidLoad方法中有以下代码 - (void)viewDidLoad { self._starButtons=[[NSMutableArray alloc]init];

我有一个
UIButton
对象的数组(我有5个按钮,所以我想将它们存储在一个数组中以便于处理)。但是
Array
给我一个错误

“由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“-[\uu NSArray0 addObject:]: 无法识别的选择器已发送到实例“

我在
viewDidLoad
方法中有以下代码

- (void)viewDidLoad {
   self._starButtons=[[NSMutableArray alloc]init];
    [self._starButtons addObject:self.starOne];
    [self._starButtons addObject:self.starTwo];
    [self._starButtons addObject:self.starThree];
    [self._starButtons addObject:self.starFour];
    [self._starButtons addObject:self.starFive];

 NSLog(@"%@",self._starButtons);
}

请告诉我哪里出了问题。

首先从数组属性声明中删除
copy
,将其设置为
strong

第二件事,正如您在评论中所说,您已经通过编程方式创建了按钮,那么您就不需要
IBOutlets
。因此,从按钮的所有属性中删除
IBOutlets

你的声明应该是

 @property (weak, nonatomic) UIButton *starOne;
 @property (weak, nonatomic) UIButton *starTwo;
 @property (weak, nonatomic) UIButton *starThree;
 @property (weak, nonatomic) UIButton *starFour;
 @property (weak, nonatomic) UIButton *starFive;
 @property (nonatomic, strong) NSMutableArray *_starButtons;
试试这个:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *one;
@property (weak, nonatomic) IBOutlet UIButton *two;
@property (weak, nonatomic) IBOutlet UIButton *three;
@end
- (void)viewDidLoad {
[super viewDidLoad];

NSMutableArray *buttonArray = [[NSMutableArray alloc] initWithObjects:one,two,three,nil];
NSLog(@"%@",buttonArray);

}

如果您使用的是故事板或Nib文件,则:

另一种方法是将UIButtons'连接到Interface Builder中的
iOutletCollection
NSArray
,而不是手动将每个按钮添加到
NSMutableArray
。所有的按钮都是这样的

@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *buttonsArray;

只需对代码进行一次更改

替换此行:

@property NSMutableArray *_starButtons;

您在哪一行收到错误?@Imad我已将副本更改为strong它给了我“NSInvalidArgumentException”,原因:'***-[\uu NSArrayM insertObject:atIndex:]:对象不能为nil'@diksha您能分享您的故事板或nib文件并显示IBOutlet吗connections@Diksha检查连接IBOutlet@diksha如果您是以编程方式创建的,那么为什么要为按钮设置IBOutlet?请分享您创建这些按钮的方法。这不一定是正确的解决方案。使用的原始属性
复制
。大概有一个很好的理由。简单地删除
copy
会改变行为,并可能导致难以发现的bug。根据所发布的相关代码,我认为不需要
copy
@马迪
@property NSMutableArray *_starButtons;