Ios NSMutableArray UI按钮按下历史记录

Ios NSMutableArray UI按钮按下历史记录,ios,arrays,sdk,uibutton,history,Ios,Arrays,Sdk,Uibutton,History,我目前正在生成一系列按钮,效果非常好。除此之外,每个按钮内部都会调用一个-(void)onTouch函数,在该函数中会进行一些数学运算以确定某个操作。这一切都很好,除了我想存储按下按钮的历史记录。我尝试了许多不同的方法来创建一个NSMutableArray并存储按下按钮的值,但是因为我只能在-onTouch操作中声明数组,所以每次按下按钮时数组都会被重置,因此它不会记住多个移动。如果我试图在我的头中声明数组并在外部合成它,我要么会得到一个错误,即nsmutable数组不是编译时thinger,要

我目前正在生成一系列按钮,效果非常好。除此之外,每个按钮内部都会调用一个
-(void)onTouch
函数,在该函数中会进行一些数学运算以确定某个操作。这一切都很好,除了我想存储按下按钮的历史记录。我尝试了许多不同的方法来创建一个
NSMutableArray
并存储按下按钮的值,但是因为我只能在
-onTouch
操作中声明数组,所以每次按下按钮时数组都会被重置,因此它不会记住多个移动。如果我试图在我的头中声明数组并在外部合成它,我要么会得到一个错误,即nsmutable数组不是编译时thinger,要么它不存储任何内容(日志输出为“(null)”。是否有人可以粘贴一些代码,说明如何声明一个数组,该数组可以在uibutton press事件发生的位置之外存储和附加uibutton标记?如果不清楚,我将在今晚稍后发布代码

干杯

你不仅需要声明数组,还需要初始化它。如果你不初始化,你不一定会得到警告,但你会得到大量的零数据

您只需要初始化数组一次(正如您所注意到的),因此
viewDidLoad
是一个很好的地方。另一个很好的地方是在自定义访问器中

- (NSMutableArray*)historyArray
{
    if (!_historyArray) {
       _historyArray = [[NSMutableArray alloc] init];
    }
    return _historyArray;
}
现在,您第一次尝试
[self.historyArray addObject:sender]
,访问者将注意到缺少historyArray,创建一个并返回它。下一轮它将不会被重新创建,因为它已经存在。

您不仅需要声明数组,还需要初始化它。如果不初始化,您不一定会得到警告,但您将得到大量的零数据

@property(nonatomic,retain)NSMutableArray *tapCollection;

-(void)viewDidLoad{

   self.tapCollection = [[NSMutableArray alloc] init];
}

-(void)onTouch:(id)sender{

   UIButton *btnTapped = (UIButton *)sender;

   [self.tapCollection addObject:[NSNumber numberWithInt:btn.tag]];
}
您只需要初始化数组一次(正如您所注意到的),因此
viewDidLoad
是一个很好的地方。另一个很好的地方是在自定义访问器中

- (NSMutableArray*)historyArray
{
    if (!_historyArray) {
       _historyArray = [[NSMutableArray alloc] init];
    }
    return _historyArray;
}

现在,当您第一次尝试
[self.historyArray addObject:sender]
时,访问者将注意到缺少historyArray,创建一个并返回它。下一轮将不会重新创建它,因为它已经存在。

请发布您的代码和实际的编译器错误消息。self.myArray=[NSMutableArray];请发布您的代码和实际编译器错误消息。self.myArray=[NSMutableArray];不能向数组中添加整数,因为它不是对象。
[self.tapCollection addObject:@(btn.tag)];
@Moxy,是的,您可以。我在调用NSInteger[]时没有遇到任何问题并将button.tag转换为数组。也就是说,执行此操作的代码比addObject:@(button.tag)稍微复杂一些拉姆沙德先生,我试试你的办法,看看她怎么样。Thanks@NessyString这将是一个c数组。你不能将整数放入NSArray/NSMutableArray中,除非你将它们封装在一个NSNumber中,就像rmaddy评论的那样。是的。我刚刚快速发布了答案,然后就离开了……现在编辑了……对不起,伙计们:)不能将整数添加到数组中,因为它不是对象。
[self.tapCollection addObject:@(btn.tag)]@Moxy,是的,你可以。调用NSInteger[]并将button.tag转换为数组没有问题。也就是说,执行此操作的代码比addObject:@(button.tag)稍微复杂一些。拉姆沙德,我试试你的解决办法,看看她怎么样。Thanks@NessyString这将是一个c数组。不能将整数放入NSArray/NSMutableArray中,除非将它们封装在NSNumber中,如rmaddy commented.yup。。我只是很快把答案贴了出来,然后就走了。。。现在编辑..对不起,伙计们。:)
@property(nonatomic,retain)NSMutableArray *tapCollection;

-(void)viewDidLoad{

   self.tapCollection = [[NSMutableArray alloc] init];
}

-(void)onTouch:(id)sender{

   UIButton *btnTapped = (UIButton *)sender;

   [self.tapCollection addObject:[NSNumber numberWithInt:btn.tag]];
}