'void *'类型的集合元素不是Objective-C对象

时间:2014-11-13 02:04:44

标签: objective-c xcode ios8

我正在尝试将渐变视图添加到iOS应用的背景中。

使用广告联盟UIColor+uiGradients我在viewDidLoad下的背景中添加了GradientLayer:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIColor *startColor = [UIColor uig_emeraldWaterStartColor];
    UIColor *endColor = [UIColor uig_emeraldWaterEndColor];

    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.view.bounds;
    gradient.startPoint = CGPointMake(0, 0);
    gradient.endPoint = CGPointMake(self.view.frame.size.width, 0);
    gradient.colors = @[(id)[startColor CGColor], (id)[endColor CGColor], nil];

    [self.view.layer insertSublayer:gradient atIndex:0];   
}

错误发生在gradients.colors = @[(id)[startColor CGColor], (id)[endColor CGColor], nil];

错误:

  

'void *'类型的collection元素不是Objective-C对象。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

从数组末尾删除nil。您不能将nil放在Objective-C数组中,也不能在@[]文字中使用nil。所以:

gradient.colors = @[(id)[startColor CGColor], (id)[endColor CGColor]];