2009-06-04 12 views
1

私には2つのクラスindexViewControllerflashCardQuestionViewControllerがあります。別のNsMutableArrayからNSMutableArrayを入力してください

indexViewControllerには、テーブルが配列で埋められています。

-(void)getMultipleChoiceAnswer 
{ 
    if(optionid!=nil) 
     [optionid removeAllObjects]; 
    else 
     optionid = [[NSMutableArray alloc] init]; 

    if(optionText!=nil) 
     [optionText removeAllObjects]; 
    else 
     optionText = [[NSMutableArray alloc] init]; 

    clsDatabase *clsDatabaseObject = [[clsDatabase alloc] init]; 
    sqlite3_stmt *dataRows = [clsDatabaseObject getDataset:"select optionID,OptionText from flashCardMultipleAnswer where questionId=1"]; 
    while(sqlite3_step(dataRows) == SQLITE_ROW) 
    { 
     [optionid addObject:[NSNumber numberWithInt:sqlite3_column_int(dataRows,0)]]; 
     [optionText addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(dataRows,1)]]; 
    } 

    sqlite3_finalize(dataRows); 
    [clsDatabaseObject release]; 
} 

と私はindexViewControllerviewDidLoad方法でこのメソッドを呼び出すいます:

今私は、データベースからいくつかのデータを取得しています。

今度はがflashCardQuestionViewControllerlistNoOfOptionsInQuestionにあります。

listNoOfOptionsInQuestionのオブジェクトをoptionTextの配列でindexViewControllerに入力したいとします。

どうすればいいですか?

答えて

4

配列をコピーするにはいくつかの方法があります: - [NSArray copy]を使用して不変のコピーを取得するか、または可変コピーの[NSArray mutableCopy]を使用します。コピーが参照を追加することを忘れないでください。そうすれば、GCを使用していない場合はどこかでリリースや自動解放が必要になります。

また、 - [NSMutableArray addObjectsFromArray:]を使用することもできます。

あなたが最後にこのような何かをしたいようなあなたの例を考えると、それが見えます:

[flashCardQuestionViewController setListNoOfOptionsInQuestion:optionText]; 

そしてFlashCardQuestionViewControllerに、あなたが望むようなもの:

- (void)setListNoOfOptionsInQuestion:(NSArray *)options 
{ 
    if (options != listNoOfOptionsInQuestion) { 
    [listNoOfOptionsInQuestion release]; 
    listNoOfOptionsInQuestion = [options mutableCopy]; 
    } 
} 
+0

これはうまくいきません.i両方のクラスでNSMUtableArrayが両方とも使用されています –

+0

何がうまくいかないかについて少し詳しく説明する必要があります。いくつかのコードを投稿してください。 –

+0

私は今すぐソリューションを教えてコードを入れている –

1

ラーフル、

実際には、各オブジェクトに完全に異なるMutableArrayのコピーが必要ですか。両方のオブジェクトが同じ配列を指すようにすることは可能でしょうか?たとえば:

ClassOne *one = [[ClassOne alloc] init]; 
ClassTwo *two = [[ClassTwo alloc] init]; 

// build mutable array mArray 
// ... 

one.objectArray = mArray; 
two.objectArray = mArray; 

または、2つの配列を別の方法で変更する必要がありますか? (上記のクリスにより示唆されるように)、これを試してみてください。

ClassOne *one = [[ClassOne alloc] init]; 
ClassTwo *two = [[ClassTwo alloc] init]; 

// build mutable array mArray 
// ... 

one.objectArray = mArray; 
two.objectArray = [mArray mutableCopy]; 

再び、これはあなたが私たちが識別することができ、より正確な疑問や問題点を与える必要があるでしょうその後、必要なものではない場合。

関連する問題