2015-06-03 2 views
0

Я новичок в объективе-c, и теперь у меня возникла проблема, которую я не понимаю, как ее решить. Я читал эту тему CGContextSetFillColorWithColor: invalid context 0x0, но не нашел ответа.<Error>: CGContextSetFillColorWithColor: недопустимый контекст 0x0

Проблема заключается в том, что я получаю 2 ошибки, как это:

CGContextSetFillColorWithColor: недопустимый контекст 0x0. Это серьезная ошибка. Это приложение или используемая им библиотека использует недопустимый контекст и тем самым способствует общему ухудшению стабильности и надежности системы. Это уведомление является любезностью: устраните эту проблему. Это станет фатальной ошибкой в ​​предстоящем обновлении.

Это мой код:

#import "PushButtonView.h" 
#import <QuartzCore/QuartzCore.h> 

@implementation PushButtonView 

@synthesize isAddButton; 
@synthesize fillColor; 

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:(NSCoder *)aDecoder]; 
    if (!self) { 
    return nil; 
} 
[self inspectableDefaults]; 
return self; 
} 

-(void)inspectableDefaults{ 
    self.isAddButton = YES; 
    self.fillColor = [UIColor colorWithRed:0.95 green:0.6 blue:0.5 alpha:1];  
    [self.fillColor setFill]; 
} 

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextClearRect(context, rect); 
    if (self.isAddButton) { 
     self.fillColor = [UIColor colorWithRed:0.3 green:0.85 blue:0.91 alpha:1]; 
    } else 
    self.fillColor = [UIColor colorWithRed:0.95 green:0.6 blue:0.5 alpha:1]; 
    [self.fillColor setFill]; 
    CGContextFillEllipseInRect(context, rect); 

//Line characteristics 
    CGContextSetRGBStrokeColor(context, 1, 1, 1, 1); 
    CGContextSetLineWidth(context, 4); 

// Horizontal line 
    CGPoint bezierStart = {self.bounds.origin.x + (self.bounds.size.width)/5, self.bounds.size.height/2}; 
    CGPoint bezierEnd = {self.bounds.size.width - (self.bounds.size.width)/5, self.bounds.size.height/2}; 
    CGContextBeginPath(context); 
    CGContextMoveToPoint(context, bezierStart.x, bezierStart.y); 
    CGContextAddLineToPoint(context, bezierEnd.x, bezierEnd.y); 
    CGContextStrokePath(context); 

// Vertical line 
    if (self.isAddButton) {      
     CGPoint bezier2Start = {self.bounds.size.width/2, self.bounds.size.width - (self.bounds.size.height)/5}; 
     CGPoint bezier2End = {self.bounds.size.width/2, (self.bounds.origin.y + self.bounds.size.height/5)}; 
     CGContextBeginPath(context); 
     CGContextMoveToPoint(context, bezier2Start.x, bezier2Start.y); 
     CGContextAddLineToPoint(context, bezier2End.x, bezier2End.y); 
     CGContextStrokePath(context); 
    } 

    [self.fillColor setFill]; 
} 
@end 
+0

Что произойдет, если вы закомментируете вызовы '-setFill'? –

+0

если я прокомментирую все вызовы setFill, я получу неслоистые изображения, но мне это действительно не нужно в методе inspectableDefaults – AOY

ответ

4

В вашем методе inspectableDefaults вы не должны вызывать [self.fillColor setFill]. Метод setFill устанавливает цвет заливки для текущего графического контекста, и поскольку у вас нет контекста, вы получаете эту ошибку. Просто удалите эту строку, и вы хорошо.

+0

Спасибо)) Ты мне так помог! – AOY

Смежные вопросы