Заполнить NSMutableArray из другого NsMutableArray - PullRequest
1 голос
/ 04 июня 2009

У меня есть два класса indexViewController и flashCardQuestionViewController.

В 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];
}

и я вызываю этот метод в viewDidLoad методе indexViewController.

Теперь у меня есть еще один NSMutableArray в flashCardQuestionViewController с именем listNoOfOptionsInQuestion.

Я хочу заполнить listNoOfOptionsInQuestion объектами из массива optionText в indexViewController.

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 04 июня 2009

Существует несколько способов копирования массивов: вы можете использовать - [NSArray copy] для получения неизменяемой копии или - [NSArray mutableCopy] для изменяемой копии. Не забывайте, что копия добавляет ссылку, так что вам понадобится релиз или авто-релиз где-то (если вы не используете GC, который есть).

В качестве альтернативы вы можете использовать - [NSMutableArray addObjectsFromArray:].

Учитывая ваш пример, похоже, что вы хотите сделать что-то вроде этого в конце:

[flashCardQuestionViewController setListNoOfOptionsInQuestion:optionText];

А затем в FlashCardQuestionViewController вы хотите что-то вроде:

- (void)setListNoOfOptionsInQuestion:(NSArray *)options
{
  if (options != listNoOfOptionsInQuestion) {
    [listNoOfOptionsInQuestion release];
    listNoOfOptionsInQuestion = [options mutableCopy];
  }
}
1 голос
/ 04 июня 2009

Рахул,

Вам действительно нужно иметь совершенно разные копии MutableArray в каждом объекте. Возможно ли, чтобы оба объекта указывали на один и тот же массив? Например:

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

//   build mutable array mArray
//   ...

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

Или вам нужно вносить изменения в два массива по-разному? Попробуйте это (как предложено Крисом выше):

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

//   build mutable array mArray
//   ...

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

Опять же, если это не то, что вам нужно, вам придется дать нам более точный вопрос или проблему, которую мы можем определить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...