2015-06-17 3 views
0

Я использую sprite builder и Xcode.Почему переменная экземпляра кода кода не инициализируется и не распечатывается «NSGlobalBlock»?

Кто-нибудь видит, где я ошибаюсь с моим кодом «whereToNext»? Я пытаюсь использовать его для навигации между сценами, но по какой-то причине он не входит в код инициализации в шаблонах (void), даже если он входит в метод шаблонов. Поскольку он никогда не переходит в код whereToNext =^{}, когда я вызываю его в методе next(), ничего не происходит. (Следующий метод вызывается с помощью соединения коды к кнопке в спрайтах строителя.)

В качестве второго вопроса относительно CCTextField: я поместил два CCTextField узла в моем TrialCustomization.cbb (который имеет соединение ExperimentSelection пользовательского кода класса) на sprite builder, а затем создал два doc-корня var code connection «_blocks» и «_trials», а затем создал переменную в соответствующем классе с тем же именем CCTextField * _blocks; и то же самое для _trials, но когда я даю это текстовое поле, он не сохраняет его в переменные, которые я сохранил в их соответствующие методы.

#import "CCNode.h" 
@interface ExperimentSelection : CCNode 
@property (nonatomic, copy) void(^whereToNext)(void); 
@property CCTextField* _trials; 
@property CCTextField* _blocks; 

extern int trials; 
extern int blocks; 

-(void)patterns; 

-(void)setTrialandBlock; 
@end 


@implementation ExperimentSelection 

@synthesize whereToNext; 
@synthesize _blocks; 
@synthesize _trials; 

-(void)patterns{ 
    whereToNext=^{ 
     CCScene *patternsSelection = [CCBReader loadAsScene:@"PatternsSelection"]; 
     [[CCDirector sharedDirector] replaceScene:patternsSelection]; 
     NSLog(@"Why is this code not being executed??"); 
    }; 

    NSLog(@"whereToNext: %@", whereToNext); 
    [self setTrialandBlock]; 
} 

-(void)_trials:(CCTextField*)trialsNum{ 
    trials=[trialsNum.string intValue]; 
} 

-(void)_blocks:(CCTextField*)blocksNum{ 
    blocks=[blocksNum.string intValue]; 
} 

-(void)setTrialandBlock{ 

    CCScene *customizeExperiment = [CCBReader  loadAsScene:@"TrialCustomization"]; 
    [[CCDirector sharedDirector] replaceScene:customizeExperiment]; 

    NSLog(@"blocks: %i, trials: %i",blocks, trials); 
} 

-(void)next{ 
    NSLog(@"wherearewegoingnext: %@, blocks: %i, trials: %i",whereToNext, blocks, trials); 
    whereToNext(); 
} 

@end 

ответ

0

Вы уверены, что -(void)patterns был вызван?

Если да, то попробуйте изменить

void(^whereToNext)(void);

в

@property(nonatomic, copy) void(^whereToNext)(void);

UPD

Я думаю, что нет никаких проблем с созданием блока или с исполнением блок. Я думаю, что в коде есть какая-то логическая проблема. Может существовать некоторый родительский или дочерний класс, который перегружает метод «шаблонов». Вы можете добавить точку останова в свойство whereToNext и просмотреть, тогда это свойство будет изменено.

+0

В интерфейсе класса? –

+0

В интерфейсе или в категории. Для частных методов я использую категории. Вы используете ARC? –

+0

все еще не работает. Как только я объявляю его в методе шаблонов, я печатаю NSLog (@ "WhereToNext:% @", гдеToNext). И я все еще получаю <_NSGlobalBlock__: 0x28da10>, который я предполагаю, это всего лишь адрес вместо содержимого, которое я хотел заполнить его –