2011-01-20 153 views
1

嘿!我一直在尝试使用addObject语法将数组添加到NSMutableArray。该应用崩溃时没有明确提及错误。你能告诉我这是怎么完成的吗?我有一个创建数组的类Stack。所以我使用我创建的名为tem的实例来调用该类。因此,[self tem]是我对数组的调用。通过这个程序,我只是将UILabels添加到数组中(我知道你会建议添加一个字符串,然后更改为UILabels,但我需要这样做),并且最后,我想将这个数组添加到我的'list'数组。添加NSMutableArray到另一个NSMutableArray

-(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]; 
    } 
} 
+4

分享你的一些代码 – 2011-01-20 07:16:54

回答

3

好的,这个答案让所有的编辑变得混乱。我已经将它编辑得更加清晰,理解了我们如何得出最终答案的线索。

最终的答案

答案是改变:

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

要:

list = [[NSMutableArray alloc] init]; 

(...这是不是真的创造一个最好的办法NSMutableArray,但无论如何它都可以工作。)

这是根据基于您的评论,它[list addObject:[self tem].array];后崩溃了提问者的代码

的错误版本,我必须认为你的实例变量listStack*类型,该堆栈不是的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]创建数组,并省略对象列表中的零终止符。你有没有这样做?

+0

好吧,我发布代码之前,这里有一个简短的介绍。我有一个创建数组的类Stack。所以我使用我创建的名为tem的实例来调用该类。因此,[self tem]是我对数组的调用。通过这个程序,我只是将UILabels添加到数组中(我知道你会建议添加一个字符串,然后更改为UILabels,但我需要这样做),并且最后,我想将这个数组添加到我的'list'数组。 (列表) - (Stack *)list { if(!list) list = [[Stack alloc] init]; 返回列表; } – Label 2011-01-20 07:39:52

相关问题