2013-02-27 4 views
0

позволяет себе такой сценарий:Доступ массив в Objective C

Game.h:

@interface Game : CCLayer 
{  
    NSMutableArray* questions; 
} 

@property (nonatomic,retain) NSMutableArray* questions; 


- (void) didLoadFromCCB; 
- (void) pressitem:(id)sender; 

@end 

Game.m

@implementation Game 

@synthesize questions; 

- (void) didLoadFromCCB 
{ 
    NSMutableArray *questions = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:-1],nil]; 

    NSLog(@"didload %@", questions); 
} 


- (void) pressitem:(id)sender 
{ 
    NSLog(@"pressitem %@",questions); 
} 
@end 

Я получаю журнал от didLoadFromCCB но на pressitem так ли возвращает null. Не следует ли доступ к массиву через всю мою реализацию?

Я знаю, что это швы, как вопрос на самом деле, но я пришел из фреймворка/php-фона, и я просто заказал C и книгу Objective C, но пока я жду, я просто хотел немного выкопать.

спасибо за ваше время :)

ответ

0

Сфера применения. NSMutableArray *questions объявляет переменную локально методу - didLoadFromCCB. Он не устанавливает переменную экземпляра (переменная с меньшей областью подавляет переменную с тем же именем, но более широкую область). Просто напишите

self.questions = [[NSMutableArray alloc] initWithObject:[NSNumber numberWithInteger:-1]]; 

вместо этого.

+0

Если вы не используете ARC, это, вероятно, вызовет утечку памяти, свойство увеличит количество удержаний +1, а также инструкцию alloc. Таким образом, вы заканчиваете объект с коэффициентом сохранения 2 и что вы, вероятно, только отпустите его в методе dealloc. –

+0

@PaulN Я знаю. (Вы честно думали, что я этого не знал?) Но, кроме меня, никто больше не использует MRC. Очень жаль. – 2013-02-27 22:36:38

+0

Благодарю вас обоих =) действительно, self.questions работал, когда я нажимаю на него, регистрирует массив, но после этого он сбрасывает мое приложение сразу после этого, мне нужен какой-то сотовый телефон после его использования? –

2

Вашего местного декларирования questions в didLoadFromCCB тени переменного экземпляра. Вы должны, вероятно, просто сделать эту линию:

self.questions = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:-1],nil]; 

Тогда вы будете создавать массив и хранящий указатель на него в переменном экземпляре, а не просто сделать локальный указатель, который сразу же выходит из области видимости.

+0

Почему бы не указать свойство, если оно объявлено? – 2013-02-27 22:30:14

+0

Это тоже работает. Вероятно, это даже предпочтительнее. Я отредактирую это. –

+0

Отлично, спасибо. – 2013-02-27 22:31:38

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