2013-04-03 38 views
0

我定製我的梯度圖和通過執行在其上添加的UILabel以下:[不是一個類型保留]:消息發送到解除分配的情況下,目標C

@implementation ECertificateViewController 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    CustomViewBackGround *bgView  = [[CustomViewBackGround alloc] initWithFrame:CGRectMake(0, 0, 301, 26)]; 
    [self.mainView addSubview:bgView]; 
} 


#import "CustomViewBackGround.h" 

@implementation CustomViewBackGround 
- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     CGFloat height     = 20.0; 
     CGFloat x      = 5; 
     CGFloat y      = 3; 
     titleLabel      = [[UILabel alloc] initWithFrame:CGRectMake(x, y, self.bounds.size.width - 2 * x, height)] ; 
     titleLabel.text     = @"This is my label"; 
     titleLabel.textAlignment  = NSTextAlignmentLeft; 
     titleLabel.opaque    = NO; 
     titleLabel.backgroundColor  = [UIColor clearColor]; 
     titleLabel.font     = [UIFont boldSystemFontOfSize:14]; 
     titleLabel.textColor   = [UIColor lightGrayColor]; 
     [self addSubview:titleLabel]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 
    CGContextRef context   = UIGraphicsGetCurrentContext(); 

    CGColorRef whiteColor   = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor; 
    CGColorRef lightGrayColor  = [UIColor colorWithRed:230.0/255.0 
                 green:230.0/255.0 
                 blue:230.0/255.0 
                 alpha:1.0].CGColor; 
    CGColorRef separatorColor  = [UIColor colorWithRed:208.0/255.0 green:208.0/255.0 blue:208.0/255.0 alpha:1.0].CGColor; 

    CGRect paperRect    = self.bounds; 

    // Fill with gradient 
    drawLinearGradient(context, paperRect, whiteColor, lightGrayColor); 

    // Add white 1 px stroke 
    CGRect strokeRect   = paperRect; 
    strokeRect.size.height  -= 1; 
    strokeRect     = rectFor1PxStroke(strokeRect); 

    CGContextSetStrokeColorWithColor(context, whiteColor); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextStrokeRect(context, strokeRect); 

    // Add separator 
    CGPoint startPoint   = CGPointMake(paperRect.origin.x, paperRect.origin.y + paperRect.size.height - 1); 
    CGPoint endPoint   = CGPointMake(paperRect.origin.x + paperRect.size.width - 1, paperRect.origin.y + paperRect.size.height - 1); 
    draw1PxStroke(context, startPoint, endPoint, separatorColor);    
} 

當我在模擬器正在運行,一切工作正常,如我所料。然而,當我安裝在設備上,應用程序崩潰,我得到

[Not A Type retain]: message sent to deallocated instance,objctive c 

你有什麼想法,爲什麼我會收到這個問題?

回答

1

試試這個:

UIColor *whiteColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 
... 
drawLinearGradient(context, paperRect.CGColor, whiteColor.CGColor, lightGrayColor.CGColor); 

或者這樣:

CFColorRef whiteColor = CFBridgingRetain([UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor); 
... 
drawLinearGradient(context, paperRect, whiteColor, lightGrayColor); 
... 
CFRelease(whiteColor); 
... 

這可能是ARC儘快釋放你的UIColor S作爲你不使用它們,並通過釋放他們,他們CGColor屬性也會被釋放,因爲沒有人保留它們。

+0

我嘗試了第一個,它爲我工作。謝謝你的幫助。 – tranvutuan

相關問題