2016-03-29 7 views
-2

Я смущаюсь о том, как использовать общий экземпляр.Неиспользуемый общий экземпляр

Это мой настройки:

+ (ViewController *)sharedInstance { 

    static ViewController *_sharedInstance = nil; 
    if (_sharedInstance == nil) { 
     _sharedInstance = [[ViewController alloc] init]; 
    } 
    return _sharedInstance; 
} 

У меня также есть свойство в файле ViewController.h называется @property (nonatomic, retain) CBPeripheral * selectedPeripheral; и под интерфейсом в ViewController.m файле CBPeripheral * _selectedPeripheral; и я убедитесь, что synthesize them

Поэтому, когда Я делаю это. Оно работает.

[ViewController sharedInstance].selectedPeripheral = _selectedPeripheral; 
NSLog(@"_sharedInstance %@", [[ViewController sharedInstance] selectedPeripheral]); 

Но если я это сделаю? Не делая линию выше. Он возвращает null? Я думал, что синтез сделает это, поэтому мне не нужно назначать его снова?

NSLog(@"_sharedInstance %@", [[ViewController sharedInstance] selectedPeripheral]); 
+0

«И я обязательно их синтезирую» делает что значит точно? Где у вас есть ваш «тестовый» код? – Eiko

+0

@Eiko У меня есть @synthesize selectedPeripheral = _selectedPeripheral; 'У меня есть тестовый код в том же файле. Но я пробовал и в других файлах, и оба они возвращают null. – PictureMeAndYou

+0

Откуда вы получаете '_selectedPeripheral'? Вы устанавливаете ivar в свой метод 'init', и вы переопределили свой метод' -init'? Кроме того, в каком файле находится эта строка: '[ViewController sharedInstance] .selectedPeripheral = _selectedPeripheral;'? – fullofsquirrels

ответ

0

Вы не назначая никакой ценности _selectedPeripheral, таким образом, является не имеет никакого значения.

Попробуйте установить _selectedPeripheral внутри вашего одиночного инициализатора.

Я ничего не знаю о коде, но это означает, что нужно что-то выбрать. Вы можете иметь проблемы в коде выбора, а также, но вы класс не будет волшебно создавать объекты, потому что это синглтон ;-)

EDIT

@synthesize только создает экземпляр variavle (подчеркнуто), поэтому он доступен из вашего класса. Обратите внимание, что это необходимо, только если вы перезаписываете геттер и сеттер.

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

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