将NSMutableArray添加到另一个NSMutableArray

时间:2011-01-20 07:14:36

标签: objective-c nsmutablearray add

喂!我一直在尝试使用addObject语法将数组添加到NSMutableArray。应用程序崩溃时没有明确提到错误。你能告诉我这是怎么做到的吗?


我有一个创建数组的类Stack。所以我使用我创建的名为tem的实例来调用该类。因此,[self tem]是我对数组的调用。通过该程序,我只是将UILabels添加到数组中(我知道你建议添加一个字符串,然后更改为UILabels,但我需要这样做)并且最后,我想将这个数组添加到我的'list'数组。

-(Stack *)tem {
  if(!tem)
    tem=[[Stack alloc]init];
  return tem;
}

-(void)viewDidLoad{
  //code
  list=[NSMutableArray arrayWithArray:[self list].array];
}

-(IBAction)opPr:(UIButton *)sender
{
  if([[[sender titleLabel]text] compare: @"="]==0) {
    //code
    UILabel *t=[[UILabel alloc]init];
    //complete creating label
    [[self tem]push:t];
    //add above label to tem array
    [list addObject:[self tem].array];
    [table reloadData];
  }
}

1 个答案:

答案 0 :(得分:3)

好的,这个答案变得杂乱无章。我编辑它是为了更清楚,可能是为了理解我们如何得出最终答案的线索。

最终答案

答案是改变:

list=[NSMutableArray arrayWithArray:[self list].array];

要:

list = [[NSMutableArray alloc] init];

(...这不是创建NSMutableArray的最佳方法,但无论如何它都可以工作。)

这是基于提问者代码的错误版本

根据您在[list addObject:[self tem].array];之后崩溃的评论,我必须得出结论,您的实例变量list的类型为Stack*,并且该堆栈不是NSMutableArray的子​​类。如果是这样,那就是你的问题。

在这种情况下,将该行更改为[[list array] addObject:[self tem].array];应修复它。

这只是一个很好的建议

另外,NSMutable数组完全能够在不进行修改的情况下充当堆栈。例如:

NSMutableArray* ar = [NSMutableArray arrayWithCapacity:someCapacity];
// Push
[ar addObject:narf]; // narf being some object reference
// Pop
id popped = [ar lastObject];
[ar removeLastObject];

如果要以语义一致的方式封装堆栈行为,可以使用类别将push和pop方法添加到NSMutableArray。这将使您的代码更简单,更不容易出错。

在发布任何代码之前,这是我第一次回答这个问题

由于你没有发布任何代码,这是在黑暗中刺伤。但。使用数组实现此目的的一种方法是使用[NSArray arrayWithObjects:obj obj ... nil]创建数组并省略对象列表中的nil终止符。你有没有机会这样做?