Заменить содержимое NSMutableArray на NSArray - PullRequest
3 голосов
/ 30 марта 2012

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

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

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

Ответы [ 5 ]

5 голосов
/ 30 марта 2012

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

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

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

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

4 голосов
/ 30 марта 2012

Попробуйте следующим образом:

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

Или

NSMutableArray *sessionData = [[NSMutableArray alloc] initWithContentsOfArray:result];
0 голосов
/ 30 марта 2012

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

Да.

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

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

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

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

0 голосов
/ 30 марта 2012

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

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
0 голосов
/ 30 марта 2012

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

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