2010-06-18 5 views
1

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

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

.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); 
} 
+2

В чем проблема, с которой вы столкнулись? Btw, вы должны вызвать [release массива] перед сохранением копии someArray, чтобы избежать утечки памяти предыдущего массива. – MKroehnert

ответ

7

Одна из двух вещей произошло:

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

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

+0

ну все штопать, он возвращал ноль. –

0

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

+0

массив показывает значение null, когда я nslog его в heresNewMethod –

+0

@Matt: вы проверяли, что 'someArray' не' null' или 'nil' до его копирования? – MKroehnert

+0

есть. Это не так, есть данные –

0

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

Пожалуйста, внесите свой настоящий код.

+0

не имеет значения, я решил проблему благодаря великому Петру Хосей –

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