2011-01-20 8 views
1

Hey!私は、addObject構文を使用してNSMutableArrayに配列を追加しようとしています。エラーの明示的な言及なしに、アプリケーションがクラッシュします。これがどのように行われたか教えてください。別のNSMutableArrayにNSMutableArrayを追加します。


私は配列を作成するクラスStackを持っています。だから私は作成した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]; 
    } 
} 
+4

あなたのコードを共有してください –

答えて

3

いいえ、この回答はすべて編集で煩雑になっています。私は最終的な答えにどのように到達したのかを理解する可能性があるので、もっと明確に編集しました。

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

へ:

list = [[NSMutableArray alloc] init]; 

(...作成するための最良の方法は本当にないの答えは変更した

最終的な答えとにかく動作する可能性があります)。

は、これはそれが[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]; 

、カテゴリを使用してNSMutableArrayのへのプッシュとポップメソッドを追加することができます。これにより、コードが簡単になり、エラーが発生しにくくなります。任意のコードがこれを使用すると、任意のコードを掲載しましたので、いない暗闇の中で刺している

を投稿されていた前

これは、質問に答えるの私の最初の刺しました。しかし。配列でそれを達成する1つの方法は、[NSArray arrayWithObjects:obj obj ... nil]を使用して配列を作成し、オブジェクトのリストでnilターミネータを省略することです。万一それをしていますか?

+0

コードを投稿する前に、ここに小さなブリーフがあります。私は配列を作成するクラスStackを持っています。だから私は作成したtemというインスタンスを使ってそのクラスを呼び出します。したがって、[セルフ]は配列への私の呼び出しです。プログラムを使って、配列にUILabelsを追加するだけです(文字列を追加してからUILabelsに変更することをお勧めしますが、このようにする必要があります)。最後にこの配列を'list'配列。 - (スタック*)リスト { if(!list) list = [[Stack alloc] init]; リターンリスト。 } – Label

+0

申し訳ありません、コードを編集しました。小さな誤りがありました。訂正されたコードをイタリック体で投稿しました(アスタリスクの中に表示されます) – Label

+0

編集したコードを見てください。最初のメソッドが変更されました。それは、スタックと配列についてのことを明確にするのに役立ちます。 説明のために: tem:NSMutableArrayを作成するStackクラスのインスタンス。 リスト:現在のクラスで作成されたNSMutableArray。 – Label

関連する問題