2016-09-02 4 views
0

J'essaie de créer une variable UIColor et une méthode d'instance partagée dans mon fichier AppDelegate.h, qui peut être utilisé pour accéder à la valeur de cette variable n'importe où dans l'application. Ci-dessous est mon code pour AppDelegate.h-Les valeurs des variables UIColor sont nulles pour la première instance dans iOS

+(AppDelegate *)sharedInstance; 
@property(nonatomic,strong) UIColor * darkColorC1; 

et AppDelegate.m-

+ (AppDelegate *)sharedInstance { 
static dispatch_once_t onceToken; 
static AppDelegate *instance = nil; 
dispatch_once(&onceToken, ^{ 
    instance = [[AppDelegate alloc] init]; 
}); 
return instance; 
} 

J'ai une classe dans laquelle différentes couleurs sont affichées sur tableview, et lorsque je tente de sélectionner une un de la couleur, il est enregistré dans NSUserDefaults. Je suis en train d'affecter la couleur enregistrée dans userdefaults à cette variable darkcolorc1 en utilisant ci-dessous statements-

AppDelegate *globals = [AppDelegate sharedInstance]; 
globals.darkColorC1 = color1; 

Je suis en mesure de stocker la valeur color1 (Userdefaults) dans ma variable AppDelegate darkColorC1, et quand je ferme l'application et essayer pour l'exécuter à nouveau, j'obtiens la valeur de couleur sélectionnée dans la méthode Appdelegate -didFinishLaunchingWithOptions. Mais quand j'essaye d'assigner cette couleur à mon premier contrôleur de vue il montre la valeur nulle. Pour EG-

AppDelegate *globals = [AppDelegate sharedInstance]; 
self.view.backgroundcolor= globals.darkColorC1; 

il montre la valeur nulle pour globals.darkColorC1.

Également lorsque j'essaie de sélectionner une autre couleur et de la stocker dans la variable globals.darkColorC1 et d'essayer de charger mon premier contrôleur de vue, la valeur n'est pas nulle pour le moment. Quelqu'un peut-il s'il vous plaît aidez-moi à résoudre ce problème. Toute aide est appréciée.

+0

AppDelegate est une classe personnalisée, ou le '[[UIApplication s haredApplication] délégué] '? – Larme

+0

il est délégué [[UIApplication sharedApplication]] –

+0

Pourquoi avez-vous une init personnalisée et une instance partagée personnalisée pour cela? – Larme

Répondre

0

l'objet de AppDelegate n'a pas besoin d'être créé comme celui-ci, vous pouvez utiliser l'objet de AppDelegate comme celui-ci

AppDelegate *appDelObj = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

Aussi, pourquoi abandonnes ce type de variables dans AppDelegate classe, créez un singleton les types de variables auxquels vous souhaitez accéder dans l'application.

Par exemple

Dans la classe .h

#import <Foundation/Foundation.h> 

@interface MyDataHandler : NSObject 

+ (instancetype)sharedDataHandler; 

@property(nonatomic,strong) UIColor * darkColorC1; 

@end 

Maintenant, en vous .M classe

#import "MyDataHandler.h" 

@implementation MyDataHandler 

+ (MyDataHandler *) sharedDataHandler { 
    static id _sharedHandler = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _sharedHandler = [[self alloc] init]; 
    }); 
    return _sharedHandler; 
} 
- (id)init { 
    if (self = [super init]) { 
    } 
    return self; 
} 
@end 

Maintenant, vous pouvez accéder à cette variable comme celui-ci

[MyDataHandler sharedDataHandler].darkColorC1 
+0

ok. Maintenant j'ai compris. merci pour les suggestions. Mais pouvez-vous me dire quand cette classe est appelée ou comment appeler les méthodes de cette classe? –

+0

Je l'ai mentionné dans la réponse - [MyDataHandler sharedDataHandler] .darkColorC1 – Rajat