@SpaceInvader

Как получить доступ к переменной из другого класса?

Как получить доступ к переменной 'pew' из другого класса (ViewController)?
// ImageTouched.h
#import <UIKit/UIKit.h>

@interface ImageTouched : UIImageView    
@property (nonatomic, strong) NSString *pew;    
@end

// ImageTouched.m
#import "ImageTouched.h"

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    NSLog(@"Image Touched");
    self.pew = @"pewpewpewew";  
}

// myViewController.m
#import "ImageTouched.h"

- (void)viewDidLoad
{
    [super viewDidLoad];    
    ImageTouched *instance = [[ImageTouched alloc] init];        
    NSLog(@"Pew value is %@", instance.pew);

}
log:
Pew value is (null)
Image Touched

Думаю проблема в том, что переменная 'pew' инициализируется после нажатия на картинку. В этот момент myViewController уже загружен. Нужен метод, который обрабатывал бы события после загрузки контролера.
  • Вопрос задан
  • 3398 просмотров
Пригласить эксперта
Ответы на вопрос 3
morozovdenis
@morozovdenis

Думаю проблема в том, что переменная 'pew' инициализируется после нажатия на картинку. В этот момент myViewController уже загружен. Нужен метод, который обрабатывал бы события после загрузки контролера.


what what? я не понимаю смысла, опишите подробнее

такой код проинициализирует pew до выполнения NSLog
#import "ImageTouched.h"

-(void)awakeFromNib
{
    self.pew = @"pewpewpewew";  
}
Ответ написан
Комментировать
@Rorg
Думаю проблема в том, что переменная 'pew' инициализируется после нажатия на картинку. В этот момент myViewController уже загружен. Нужен метод, который обрабатывал бы события после загрузки контролера.


Принципе Вы правы. На момент создание вида и вызова функции viewDidLoad событие (нажатие на изображение) еще не произошло, поэтому переменная pew не проинициализирована. Если брать Ваш вопрос в целом (Как получить доступ к переменной из другого класса?) Вы все делаете правильно, но в данной ситуации событие инициализирущее переменную pew происходит позже чем создание вида.

Опишите подробнее что именно нужно.
Ответ написан
Комментировать
@agee
В коде viewcontroller'а напишите
- (void)viewDidLoad {
    [super viewDidLoad];    
    ImageTouched *instance = [[ImageTouched alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    [self.view addSubview:instance];
    // Подписываемся на уведомление
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageDidTouch:) name:@"ImageTouchedImageDidTouch" object:nil];
}


Добавьте к коду вью-контроллера метод
// Метод, который обрабатывает уведомление
- (void)imageDidTouch:(NSNotification *)notification {
    if ([notification.object isKindOfClass:[ImageTouched Class]])
        NSLog(@"Pew value is %@", ((ImageTouched *)notification.object).pew);
}


А уже в touchesBegan вызовите это уведомление
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"Image Touched");
    self.pew = @"pewpewpewew";  
    // Отправить уведомление, отправляя самого себя в качестве параметра object
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ImageTouchedImageDidTouch" object:self];
}


Для чтения:
О свойствах https://developer.apple.com/library/ios/documentat...
Об уведомлениях: https://developer.apple.com/library/mac/documentat...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы