에서 UIView의 배경 색상을 설정할 수 없습니다 내가 가지고있는보기 컨트롤러에 다음 코드 :은의 ViewController
- (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:
을 사용하여 생성되었습니다.이 차이가 발생할 수 있습니까?
업데이트 : ColorWithRed : green : blue : alpha :를 사용하여 만든 ThemeManager의 값을 사용하면 정상적으로 작동합니다. 배경 이미지가있는 색상을 사용하여이를 수행 할 수있는 방법이 있습니까? OK 다음 작품 :
[theView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]]];
업데이트 :이 확인도 작동합니다
UIColor *forBackground = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
[theView setBackgroundColor:forBackground];
을 내 원래의 예에서이 객체는 그래서 문제가 무엇을하는 UIColor
했다 [themer backgroundColor]
에서 반환? UIDeviceRGBColor *
여기 형 forBackground
존재 입력의 forBackground
존재 NSConstantValueExpression *
및
UIColor *forBackground = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
결과
UIColor *forBackground = [themer backgroundColour];
결과 : I는 디버거 단계별
ThemeManager의 backgroundColour 메서드 코드입니다.
- (UIColor *)backgroundColour {
if (backgroundColour == nil) {
backgroundColour = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myimage.png"]];
}
return backgroundColour;
}
backgroundColour는 인스턴스 변수의 이름이기도합니다.
디버거 당신은 backgroundColour이 전무 경우에만 패턴 색상을 구축 setBackgroundColor – Curyous
를 포함하는 라인의 빨간색 화살표가 중지됩니다. backgroundColour가 nil입니까? 색상을 만드는 줄에 중단 점을 넣으면 디버거가 멈 춥니 다? –
좋은 점은, 색상 생성 코드를 init 메소드로 옮겼습니다. 비록이 문제의 근본 원인이 아니지만 더 나은 해결책입니다. – Curyous