【问题标题】:NSMutableArray UIButton Press HistoryNSMutableArray UIButton 按下历史
【发布时间】:2013-03-18 23:42:04
【问题描述】:

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

干杯

【问题讨论】:

  • 请发布您的代码和实际的编译器错误消息。
  • self.myArray = [NSMutableArray 数组];

标签: ios arrays sdk uibutton history


【解决方案1】:

您不仅需要声明数组,还需要初始化它。如果不初始化,不一定会得到警告,但会得到很多 nil 数据。

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

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

现在当你第一次尝试[self.historyArray addObject:sender] 时,访问器会注意到没有historyArray,创建一个并返回它。下一轮它不会被重新创建,因为它已经退出了。

【讨论】:

    【解决方案2】:
    @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]];
    }
    

    【讨论】:

    • 您不能将整数添加到数组中,因为它不是对象。
    • [self.tapCollection addObject:@(btn.tag)];
    • @Moxy,是的,你可以。我在调用 NSInteger[] 并将 button.tag 转换为数组时没有遇到任何问题。话虽如此,执行此操作的代码比 addObject:@(button.tag) 更复杂一些。 Ramshad,我会试试你的解决方案,看看她的情况如何。谢谢
    • @NessyString 那将是一个 c 数组。您不能将整数放入 NSArray/NSMutableArray 中,除非您将它们包装在像 rmaddy 评论的 NSNumber 中。
    • 是的..我只是快速发布了答案然后离开了...现在编辑了..对不起伙计们。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多