При запуске программы iOS в XCode 4.6.3 я продолжаю получать длинный список ошибок, например:
Jul 20 13:24:40 ps2xipas3qfe Chess[277] <Error>: CGContextSetRGBFillColor: invalid context 0x0
Jul 20 13:24:40 ps2xipas3qfe Chess[277] <Error>: CGContextFillRects: invalid context 0x0
Вот код, который генерирует ошибку:
- (void)drawRect: (CGRect)rect {
//[super drawRect:rect];
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
CGRect TheRect = CGRectMake(i*30+30,j*30+30,30,30);
CGContextRef context = UIGraphicsGetCurrentContext();
if(i%2 == j%2) {
CGContextSetRGBFillColor(context,1.0,0.0,0.0,0.0);
}
else {
CGContextSetRGBFillColor(context,0.0,0.0,0.0,0.0);
}
CGContextFillRect(context,TheRect);
}
}
}
Когда я искал в Интернете ошибки «недопустимый контекст», я получил ответы, что графический контекст можно получить только из функции-члена «drawRect», но это внутри функции «drawRect», и я все еще получаю ошибка. Класс здесь ChessBoard
, который наследуется от UIView
.
Спасибо за помощь, но я не могу запустить свою программу и очень запутался. Я больше не получаю ошибки, которые я получал раньше, но теперь я получаю только пустой экран. Я пробовал setNeedsDisplay
и setNeedsDisplayInRect
, но ни один из них не работает.
Вот функция, которая у меня есть в ChessViewController.m
:
- (void)viewDidLoad
{
[super viewDidLoad];
ChessBoard* TheBoard = [ChessBoard new];
[self.view addSubview: TheBoard];
// [TheBoard setNeedsDisplayInRect: CGRectMake(0,0,400,400)];
[TheBoard setNeedsDisplay];
}
Вот функция, которая у меня есть в ChessBoard.m
:
- (void)drawRect: (CGRect)rect {
[super drawRect:rect];
UILabel* HelloWorld = [UILabel new];
HelloWorld.text = @"Hello, World!";
[HelloWorld sizeToFit];
HelloWorld.frame = CGRectMake(1,1,100,20);
[self addSubview:HelloWorld];
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
CGRect TheRect = CGRectMake(i*30+30,j*30+30,30,30);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context,TheRect);
if(i%2 == j%2) {
CGContextSetRGBFillColor(context,1.0,0.0,0.0,1.0);
}
else {
CGContextSetRGBFillColor(context,0.0,0.0,0.0,1.0);
}
}
}
}
drawRect
. Я не понимал, что я не должен был. - person user1672637   schedule 21.07.2013drawRect:
. Об этом даже говорится в документах дляUIView drawRect:
. Если вы хотите, чтобы представление снова отрисовывалось, вызовитеsetNeedsDisplay
для представления. См. дубликат, на который ссылается Джош. - person rmaddy   schedule 21.07.2013