2012-03-30 4 views
3

Я работаю над приложением, которое должно получить некоторые данные с сервера. Я создал класс «Сервер», который обрабатывает все сообщения и имеет переменную sessionData NSMutableArray *, где я хотел бы хранить данные, поступающие с сервера (кстати, этот подход правильный?).Замените содержимое NSMutableArray на NSArray

У меня есть данные в NSArray. Я хотел бы, чтобы NSMutableArray имел одинаковое содержимое NSArray, но я не нашел способа сделать это (sessionData = requestResult).

(подвопрос: я должен инициализировать каким-то образом NSMutableArray перед использованием я только объявил его @property и @synthesize)

+0

Я пробовал это, но не работал: [sessionData removeAllObjects]; [sessionData setArray: результат]; –

ответ

4

Try так:

sessionData = [result mutableCopy]; 
[result release]; 

Или

NSMutableArray *sessionData = [[NSMutableArray alloc] initWithContentsOfArray:result]; 
5

Код, который вы пробовали (из комментария), должен был сработать. Причина, по которой он не работает, заключается в том, что ваш sessionData был nil.

Вам необходимо инициализировать sessionData - установить его в [NSMutableArray array] в инициализаторе; то ваш код

[sessionData removeAllObjects]; 
[sessionData setArray:result]; 

будет работать отлично. Вам даже не нужна первая строка - вторая заменяет содержанием sessionData с номером result.

+0

Спасибо. Является ли этот код хорошим для его инициализации (из метода init моего класса)? self-> sessionData = [[NSMutableArray alloc] init]; –

+0

@anthmad Да, этот код инициализации должен работать. Если вы не находитесь в ARC, подумайте о назначении свойства, а не его поддержке ivar; если вы на ARC, это не имеет значения. – dasblinkenlight

0

Или, если вы могли бы сделать это:

NSMutableArray *session = [NSMutableArray arrayWithArray:someArray]; 
0

В вашем примере что-то вроде этого:

NSArray *requestData = [[NSArray alloc] initWithObjects:@"3", @"4", @"5", nil]; 
_sessionData = [[NSMutableArray alloc] initWithArray:requestData]; 
[requestData release]; 

NSLog(@"%@", [sessionData objectAtIndex:0]); // 2012-03-30 15:53:39.446 <app name>[597:f803] 3 
NSLog(@"count: %d", [sessionData count]); //2012-03-30 15:53:39.449 <app name>[597:f803] count: 3 
+1

sessionData - свойство, которое мне нужно получить от других методов. Ваш код создаст локальный изменяемый массив? –

+0

У вас есть пункт, сообщение обновлено :) – h4cky

0

1. такой подход правильный?

Да.

2. Я не нашел способ сделать это (sessionData = requestResult)

Как многие полагают, вы можете использовать mutableCopy назначить requestResult для sessionData ИЛИ вы можете использовать arrayWithArray как предлагает один ответ ,

3. Должен ли я инициализировать каким-либо образом NSMutableArray перед использованием?

Да. Если вы меняете какую-либо переменную, она должна иметь выделенную память.

Смежные вопросы