Objective-C / какао теряет значения массива - PullRequest
1 голос
/ 19 июня 2010

У меня есть несколько массивов, однако они не сохраняют свои данные для использования в другом методе.

Вот как я это настроил (упрощенно)

.h

NSArray *array;
@property (nonatomic, copy) NSArray *array;
-(void)someMethod:(NSArray*)someArray;
-(void)heresNewMethod;

.m

-(void)someMethod:(NSArray*)someArray
 {
array = [someArray copy];
 }
-(void)heresNewMethod //gets called by method not shown
 {
  NSLog(@"%@", array);
 }

Ответы [ 3 ]

7 голосов
/ 19 июня 2010

Произошло одно из двух:

  • Вы отправили объекту сообщение someMethod:, передав nil (вероятно, без значения). Сообщение nil возвращает nil, поэтому вы присвоили nil - как результат сообщения copy - переменной экземпляра array. Даже если вы ранее хранили указатель на массив, вы заменили его на nil в своем ответе на это сообщение someMethod:.
  • Вы никогда не отправляли объекту сообщение someMethod:. Поскольку переменные экземпляра инициализируются в nil, и вы никогда не помещаете ничего другого в переменную экземпляра array, она все равно содержит nil.

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

0 голосов
/ 19 июня 2010

Единственный ответ заключается в том, что предоставленный вами код не является кодом, который вы используете, и разница имеет решающее значение. Я имею в виду, что вы объявляете свойство, которое затем не используете, и неясно, правильно ли вы определяете свои методы доступа или массив также является локальным, который скрывает ваше свойство, или что.

Пожалуйста, оставьте свой реальный код.

0 голосов
/ 19 июня 2010

За исключением того факта, что вы будете пропускать то, что было в array каждый раз, когда вы вызываете someMethod:, этот код должен работать. В чем проблема, которую вы видите?

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