2011-01-20 99 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

相關問題