Я новичок в программировании для iPhone, и в Какао я не могу обновить свойство, которое я синтезировал в другом классе.
У меня есть два класса, которые должны работать вместе. В классе AnimalSelect пользователи нажимают кнопку. При нажатии кнопки пользователь перейдет в класс GamePlay, и на экране должно появиться имя выбранного им животного.
Я работаю с cocos2d для настройки игры. Я знаю, что делаю некоторые базовые вещи неправильно, но я не понял, что это такое.
Вот мой упрощенный код:
AnimalSelect.h
@class GamePlay;
@interface AnimalSelect : CCLayer {
GamePlay *gamePlay;
}
AnimalSelect.m
#import "GamePlay.h"
....
NSString *dierenNaam = @"Test";
gamePlay = [[GamePlay alloc] init];
gamePlay.dierenNaam = dierenNaam;
GamePlay.h
@interface GamePlay : CCLayer {
NSString *dierenNaam;
}
@property (nonatomic, retain) IBOutlet NSString *dierenNaam;
GamePlay.m
@synthesize dierenNaam;
....
NSLog(@"Dierennaam is: %@", dierenNaam);
Я знаю, что я делаю новичок, но не могу понять, что я делаю неправильно. Я надеюсь, что кто-то может мне помочь.
@ edc1591 - Проблема в том, что мне нужны эти данные в классе GamePlay? Пользователь выбирает кнопку в представлении класса AnimalSelect и затем переносится в представление GamePlay. В этом представлении я хочу отобразить имя выбранного животного. Вот почему мне нужно обновить свойство "dierenNaam" в классе GamePlay.
EDIT
Обновленный код:
titelLabel = [CCLabelTTF labelWithString: dierenNaam fontName: @ "Marker Felt" fontSize: 46];
titelLabel.position = ccp (160, 430);
[self addChild: titelLabel];
Итак, я изменил код следующим образом:
GamePlay.h
@property (nonatomic, retain) CCLabelTTF *titelLabel;
@property (nonatomic, retain) NSString *dierenNaam;
- (void) updateLabel;
GamePlay.m
@synthesize titelLabel;
@synthesize dierenNaam;
- (void) updateLabel {
[titelLabel setString:[NSString stringWithString:dierenNaam]];
}
AnimalSelect.m
gamePlay = [[GamePlay alloc] init];
gamePlay.dierenNaam = dierenNaam;
[gamePlay updateLabel];
[gamePlay release];
=== вернуться к основам ===
Вот новый код, который я попробовал, потому что я хотел вернуться к основам и обновить ярлык только с помощью xCode. Я создал розетки UILabel и соединил все в nib-файле. Вот код, который я использовал. Все методы NSLog выполняются, но метка не обновляется вместе с текстом переменной theUpdatedLabel.
AnimalTestViewController.h
#import <UIKit/UIKit.h>
@class Animal;
@interface AnimalTestViewController : UIViewController {
UILabel *titelLabel;
UIButton *firstButton;
}
@property (nonatomic, retain) IBOutlet UILabel *titelLabel;
@property (nonatomic, retain) IBOutlet UIButton *firstButton;
- (IBAction) firstButtonPressed;
@end
AnimalTestViewController.m
#import "AnimalTestViewController.h"
#import "Animal.h"
@implementation AnimalTestViewController
@synthesize titelLabel;
@synthesize firstButton;
@synthesize animal;
- (void) firstButtonPressed {
NSLog(@"The first button was pressed");
NSString *newAnimal = @"Horse";
NSLog(@"The variable newAnimal has a value of: %@", newAnimal);
NSString *labelText = [[NSString alloc] initWithFormat:@"Initial text: %@", newAnimal];
titelLabel.text = labelText;
[labelText release];
Animal *theAnimal = [[[Animal alloc] init];
theAnimal.animalName = newAnimal;
[theAnimal release];
}
Animal.h
#Импортировать
@class AnimalTestViewController;
@interface Animal: NSObject {
NSString * animalName;
}
@property (nonatomic, retain) NSString *animalName;
@property (nonatomic, retain) NSString *title;
- (void) updateLabel;
@end
Animal.m
#import "Animal.h"
#import "AnimalTestViewController.h"
@implementation Animal
@synthesize animalName;
@synthesize aViewController;
- (void) updateLabel {
NSLog (@"The variable animalName has a value %@", animalName);
NSString *theUpdatedLabel = @"The label is updated";
AnimalTestViewController *aViewController = [[AnimalTestViewController alloc] init];
aviewController.titelLabel.text = theUpdatedLabel;
}