喂!我一直在尝试使用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];
}
}
答案 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终止符。你有没有机会这样做?