2016-03-29 29 views
-2

Ich bin verwirrt darüber, wie geteilte Instanz zu verwenden.Gemeinsame Instanz nicht verstanden

Das ist mein ein:

+ (ViewController *)sharedInstance { 

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

Ich habe eine Eigenschaft in der ViewController.h Datei namens @property (nonatomic, retain) CBPeripheral * selectedPeripheral; und unter der Schnittstelle in der ViewController.m Datei CBPeripheral * _selectedPeripheral; und ich sicherstellen, dass zu synthesize them

Also, wenn Ich tue das. Es klappt.

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

Aber wenn ich das tue? Ohne die obige Zeile zu machen. Es gibt null zurück? Ich dachte, die Synthese würde es so machen, dass ich es nicht wieder zuweisen muss?

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

"und ich stelle sicher, sie zu synthetisieren" was genau bedeutet? Wo hast du deinen "Test" -Code? – Eiko

+0

@Eiko Ich habe '@synthesize selectedPeripheral = _selectedPeripheral;' Ich habe den Testcode in der gleichen Datei. Aber ich habe es auch in anderen Dateien versucht und beide geben null zurück. – PictureMeAndYou

+0

Woher bekommen Sie '_selectedPeripheral'? Setzen Sie den ivar in Ihrer 'init'-Methode und haben Sie Ihre '-init'-Methode überschrieben? In welcher Datei befindet sich diese Zeile? '[ViewController sharedInstance] .selectedPeripheral = _selectedPeripheral;'? – fullofsquirrels

Antwort

0

Du keinen Wert _selectedPeripheral zuweisen, so ist keinen Wert hat.

Versuchen Sie _selectedPeripheral in Ihrem Singleton Initialisierer einzustellen.

Ich weiß nichts über den Code, aber es bedeutet, dass etwas ausgewählt werden muss. Sie können auch ein Problem in Ihrer Auswahl-Code haben, aber du bist Klasse wird nicht auf magische Objekte erstellt werden, weil es ein Singleton ;-) ist

EDIT

@synthesize schafft nur die Instanz variavle (die unterstrichen), so dass es innerhalb Ihrer Klasse verfügbar ist. Beachten Sie, dass dies nur notwendig ist, wenn Getter und Setter überschrieben werden.

Beachten Sie auch, dass Sie den Getter des Singleton geschrieben haben und Probleme mit einer Eigenschaft haben. Bitte poste den Code, den wir sehen müssen, um dir zu helfen, ohne zu raten.

Verwandte Themen