У меня есть следующий код в контроллере вида:
- (void)viewDidLoad {
[super viewDidLoad];
ThemeManager *themer = [ThemeManager sharedInstance];
UIView *theView = self.view;
UIColor *forBackground = [themer backgroundColour];
[theView setBackgroundColor:forBackground];
}
но когда выполнение попадает в строку setBackgroundColor, я получаю следующую ошибку:
*** -[NSCFNumber CGColor]: unrecognized selector sent to instance 0x1237c40
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFNumber CGColor]: unrecognized selector sent to instance 0x1237c40'
Должно быть что-то простое, что я делаю неправильно, как мне установить цвет фона?
Должен ли я создавать подклассы представления и делать это там? Я бы предпочел не иметь дополнительного класса, хотя это лучшее разделение всей модели / вида / контроллера.
Обновление: значение, возвращаемое [themer backgroundColour]
, построено с использованием colorWithPatternImage:
, может ли это иметь значение?
Обновление: если я использую значение в своем ThemeManager, которое было создано с использованием colorWithRed: green: blue: alpha :, это работает нормально. Есть ли способ сделать это, используя цвет с фоновым изображением? Следующие работы в порядке:
[theView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]]];
Обновление: это тоже нормально работает:
UIColor *forBackground = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
[theView setBackgroundColor:forBackground];
В моем исходном примере объект, возвращаемый из [themer backgroundColor]
, был UIColor
, так в чем же проблема?
Когда я перехожу к отладчику:
UIColor *forBackground = [themer backgroundColour];
приводит к forBackground
типа NSConstantValueExpression *
и
UIColor *forBackground = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
приводит к forBackground
типа UIDeviceRGBColor *
Вот код для метода backgroundColour ThemeManager:
- (UIColor *)backgroundColour {
if (backgroundColour == nil) {
backgroundColour = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
}
return backgroundColour;
}
backgroundColour также является именем переменной экземпляра.