当我将UIColor
个对象添加到数组中时,我得到了Thread1: Program received signal: “SIGBRT”
这个错误。
NSMutableArray *array =[[NSMutableArray alloc] init];
UIColor *color1,*color2, *color3,*color4;
color1 = [UIColor blueColor];
color2 = [UIColor colorWithHue:0.5
saturation:0.1
brightness:0.2
alpha:1.0];
color3 = color2;
[array addObject:color1];//No Problem
[array addObject:color2];//No Problem
[array addObject:color3];//No Problem
[array addObject:color4];//Problem is here.....
当我将前三个对象添加到数组中时没有问题。但是当我添加最后一个对象时,我得到错误。这段代码有什么问题?我应该像前三个对象一样将任何东西分配给第四个对象(color4)吗?有必要吗?为什么呢?......
请举例说明。提前谢谢。
答案 0 :(得分:6)
在你没有初始化指针(color4)之前,它指向一个未定义的位置,在该位置可能没有对象,只是垃圾。也许它甚至不是一个有效的menory位置。解除引用时,它会在故意情况下崩溃。您需要将其初始化为有效对象。
此外,该对象不能是nil
,否则NSMutableArray本身会抛出异常。
答案 1 :(得分:3)
color4未初始化,您尝试在数组中插入nil。像其他颜色一样初始化color4。
答案 2 :(得分:2)
将颜色添加到数组时,Color4为nil。 NSMutableArrays是零终止的。这意味着NSMutableArray中的最后一个元素是nil。您无法手动将nil对象添加到数组中,这意味着将忽略nil对象之后的数据!
以下代码会产生异常:
NSMutableArray *array = [[NSMutableArray alloc] init];
UIColor *color;
[array addObject:color];
*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'* - [__ NSArrayM insertObject:atIndex:]:object不能为nil'
解决方法是在将color4变量添加到数组之前初始化它。
答案 3 :(得分:0)
尝试:
UIColor* color1 = [UIColor blueColor];
UIColor* color2 = [UIColor greenColor];
UIColor* color3 = [UIColor whiteColor];
UIColor* color4 = [[UIColor alloc] init];
NSMutableArray* arrayColor = [[NSMutableArray alloc] initWithObjects:color1, color2, nil ];
[arrayColor addObject:color3];
[arrayColor addObject:color4];
答案 4 :(得分:0)
你需要创建第一个UIColor对象并像这样添加数组
NSArray *mycolorsArray = [[NSArray alloc] initWithObjects:color1, color2, nil];