2010-05-23 3 views
2

J'ai un singleton dans mon application FTP conçu pour stocker tous les types de serveurs que l'application peut gérer, tels que FTP ou Amazon S3. Ces types sont des plugins situés dans le bundle de l'application. Leur chemin est localisé par applicationWillFinishLoading: et envoyé à la méthode addServerType: dans le singleton pour être chargé et stocké dans un NSMutableDictionary.Comment lier un contrôle à un singleton dans Cocoa?

Ma question est la suivante:
Comment lier un NSDictionaryController au dictionnaire à l'intérieur de l'instance singleton? Peut-il être fait dans IB, ou dois-je le faire dans le code? Je dois être en mesure d'afficher les clés du dictionnaire dans un NSPopupButton afin que l'utilisateur puisse sélectionner un type de serveur.

Merci d'avance!
SphereCat1

+1

Quelqu'un? Helloooo oooout therrre! – vilhalmer

Répondre

1

J'ai trouvé/inventé la réponse à cette question: Je remplace simplement la méthode init de sorte que lorsqu'elle est appelée à partir du fichier XIB, elle renvoie toujours le singleton. Je fournis ensuite une méthode nommée realInit pour effectuer une initialisation réelle la première fois que init est appelée.

code:

-(id)init 
{ 
    @synchronized(self) 
    { 
     if (_sharedInstance == nil) 
     { 
      _sharedInstance = [[VayprServerTypes alloc] realInit]; 
     } 
    } 
    [self release]; 

    return _sharedInstance; 
} 

-(id)realInit 
{ 
    if (self = [super init]) 
    { 
     serverTypesArray = [[NSMutableArray alloc] init]; 
    } 

    return self; 
} 

EDIT: Bien sûr, vous devrez définir _sharedInstance comme une variable statique en haut de votre implémentation de la classe:

static ClassTypeGoesHere *_sharedInstance; 

AUSSI EDIT: Comme vous le savez maintenant bien sûr que votre méthode init sera appelée au moins une fois, vous pouvez aller de l'avant et remplacer votre méthode singleton sharedInstance normale avec ceci:

+(ClassTypeGoesHere *)sharedInstance 
{ 
    return _sharedInstance; 
} 

Si quelqu'un voit des problèmes évidents avec cette conception, s'il vous plaît faites le moi savoir! SphereCat1

Questions connexes