je le code suivant dans le contrôleur de vue:Impossible de définir la couleur d'arrière-plan UIView de ViewController
- (void)viewDidLoad {
[super viewDidLoad];
ThemeManager *themer = [ThemeManager sharedInstance];
UIView *theView = self.view;
UIColor *forBackground = [themer backgroundColour];
[theView setBackgroundColor:forBackground];
}
mais quand l'exécution arrive à la ligne de setBackgroundColor, je reçois l'erreur suivante:
*** -[NSCFNumber CGColor]: unrecognized selector sent to instance 0x1237c40
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFNumber CGColor]: unrecognized selector sent to instance 0x1237c40'
Il doit y avoir quelque chose de simple que je fais mal, comment puis-je définir la couleur d'arrière-plan?
Dois-je sous-classe la vue et le faire là-dedans? Je préfère ne pas avoir la classe supplémentaire, même si cela est une meilleure séparation de l'ensemble du modèle/vue/contrôleur chose.
Mise à jour: la valeur retournée par [themer backgroundColour]
est construite en utilisant colorWithPatternImage:
, est-ce que cela peut faire une différence?
Mise à jour: si j'utilise une valeur dans mon ThemeManager qui a été construit en utilisant colorWithRed: vert: bleu: alpha :, que cela fonctionne correctement. Est-il possible de le faire en utilisant une couleur avec une image de fond? Les travaux suivants: OK
[theView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]]];
Mise à jour: cela ne fonctionne bien aussi:
UIColor *forBackground = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
[theView setBackgroundColor:forBackground];
Dans mon exemple original, l'objet retourné de [themer backgroundColor]
était un UIColor
, alors quel est le problème?
Lorsque je fais un pas dans le débogueur:
UIColor *forBackground = [themer backgroundColour];
résultats dans forBackground
être de type NSConstantValueExpression *
et
UIColor *forBackground = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
résultats dans forBackground
être de type UIDeviceRGBColor *
ici est le code pour la méthode backgroundColour du ThemeManager:
- (UIColor *)backgroundColour {
if (backgroundColour == nil) {
backgroundColour = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
}
return backgroundColour;
}
backgroundColour est aussi le nom d'une variable d'instance.
Le débogueur arrête avec la flèche rouge sur la ligne contenant setBackgroundColor – Curyous
Vous construisez la couleur du motif que si backgroundColour est nul. Êtes-vous sûr que backgroundColour est nul? Si vous placez un point d'arrêt sur la ligne qui crée la couleur, le débogueur s'arrête-t-il? –
Bon point, j'ai déplacé le code générateur de couleur à la méthode init, une meilleure solution de toute façon, même si ce n'était pas la cause première de ce problème. – Curyous