2009-08-18 12 views
1

私は合成されたNSMutableArray - theResultArrayを持っています。 NSNumberまたはNSIntegerオブジェクトを特定のインデックス(0-49)に挿入したい。何らかの理由で私の配列に固執する値は決して得られません。 viewDidLoadでIのalloc-initをtheResultsArrayゼロまたは0目的のC配列にオブジェクトをインデックスに追加する

NSInteger timeNum = time; 
    [theResultArray insertObject:[NSNumber numberWithInt:timeNum] atIndex:rightIndex]; 
    NSLog(@"The right index is :%i", rightIndex); 
    NSLog(@"The attempted insert time :%i", time); 
    NSNumber *testNum = [theResultArray objectAtIndex:rightIndex]; 
    NSLog(@"The result of time insert is:%i", [testNum intValue]); 

すべてのインデックスを返します。時間は整数です。私は上記のコードのさまざまな組み合わせを無駄にしようとしています。

コンソール出力する:

StateOutlineFlashCards[20389:20b] The right index is :20 
StateOutlineFlashCards[20389:20b] The attempted insert time :8 
StateOutlineFlashCards[20389:20b] The result of time insert is:0 
+0

時間が整数の場合、なぜ整数でもtimeと等しいtimeNumが必要なのでしょうか? – mk12

+0

私は客観的なcとココアをよく知っていません。おそらく、NSIntegerオブジェクトが目的のc intよりもうまく動作すると思いました。 – Bryan

+0

私は以下の回答にすべて変更を加えましたが、私はまったく同じ結果を得ています。 – Bryan

答えて

4

initまたはviewDidLoadメソッドで配列のメモリを割り当てる必要があります。そうしないと、何も格納できません。

あなたが行う場合は、この:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
     // Custom initialization   
     myMutableArrayName = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

またはこの:それはあなたのために働く必要があります

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    myMutableArrayName = [[NSMutableArray alloc] init]; 
} 

NSMutableArrayに整数を格納するために、私は最近、単純ではあるが「ハッキリ」なアプローチを取りました。私はそれらを文字列として保存します。私はそれらを置くときに私が使用して:

[NSString stringWithFormat:@"%d", myInteger]; 

そして、私はそれらを取るとき、私はして変換します。

[[myArray objectAtIndex:2] intValue]; 

実装するのはとても簡単だったが、状況に応じて、あなたは別の方法を使用することもできます。

+3

それらをNSNumbersとして保存する方がはるかに簡単です - それはちょうど[NSNumber numberWithInt:]です。値を取得するのは [((NSNumber *)[array objectAtIndex:])intValue]です。 – Amagrammer

+0

"myMutableArrayName"を "theResultArray"に変更しましたか?私のサンプル名がまだ残っていることを貼り付けたコードに気づいた。 NSStringを使用する利点はありません。ただし、プログラムの特定のポイントでデータの文字列比較/関数を実行する場合を除きます。そうでない場合は、このコメントスレッドのAmagrammerのアドバイスに従ってください。 – Mark

+0

Hmmm。 。 。面白い。まだあなたのビュー内の明示的なalloc/initがロードされた場合は、配列に何かがあるかどうかをテストしてください:NSLog(@ "Count of array is:%d"、theResultArray.count); 0より大きい数値が返された場合は、配列に物事を格納していることを意味します。 – Mark

5

私はあなたがNSIntegerを挿入したが、その後のNSNumberを取るしようとしていない、誤読していない限り?それらは全く異なる2つのデータ型です。あなたが奇妙な結果を得ていることは私には驚きではありません。

さらに、NSIntegerはオブジェクトではないため、配列に貼り付けることはできません。あなたはおそらくであることその整数とするNSNumberを割り当てると置くことにしたい

のようなものを試してみてください:あなたが値を取得するとき、あなたはそれをVHS版する必要があります、[theResultArray addObject:[NSNumber numberWithInteger:timeNum] atIndex:rightIndex];同様に

NSLog(@"The result of time insert is:%i", [testNum integerValue])`; 

同様に、値を取得するときには、それをアンボックスする必要があります。

率直に言って、私はこれがコンパイルされても少し驚いています。

+0

提案していただきありがとうございます。私はあなたのアドバイスを取ったが、私はまだ同じ結果を得ている。更新されたコードを見て、それ以上の提案があれば教えてください。私は初めてのクイズアプリを作るココアには全く新しいものです。 – Bryan

+0

あなたの質問のコードは私と同じように見えます。コンパイルエラーが出ていますか? – peterb

+0

コンパイルエラーはありません。 rightIndexのtheResultArrayの出力は0です。 – Bryan

1
NSInteger timeNum = time; 

これは何ですか?何時ですか"?

[theResultArray addObject:timeNum atIndex:rightIndex]; 

-addObject:atIndex:メソッドはありません。それは-insertObject:atIndex:です。とにかく「rightIndex」に挿入するのはなぜですか?なぜ単に-addObject:を使用しないのですか?

//[theResultArray replaceObjectAtIndex:rightIndex withObject:[NSNumber numberWithInt:timeNum]]; 

これは何で、なぜコメントアウトされていますか?

NSLog(@"The right index is :%i", rightIndex); 
    NSLog(@"The attempted insert time :%i", time); 
    NSNumber *testNum = [theResultArray objectAtIndex:rightIndex]; 
    //int reso = [testNum integerValue]; 
    NSLog(@"The result of time insert is:%i", testNum); 

何をしようとしていますか?

+0

時間は目的のc intです。右のインデックスは、オブジェクトを追加したいインデックスです。 Resoは使用されていないためコメントアウトされています。 ランダムに質問された50の質問があり、結果は質問の対応するインデックスに保存されています。 – Bryan

関連する問題