今天我遇到了一个问题:NSArray
和NSMutableArray
。当我将应用程序tintColor
作为元素放在其中时,它们都会中断。
UIColor *temp = [[[UIApplication sharedApplication] delegate] window].tintColor;
self.usedSliderColors = [NSArray arrayWithObjects: temp,
[UIColor colorWithRed:255.0f/255.0f green:160.0f/255.0f blue:16.0f/255.0f alpha:1.0],
[UIColor colorWithRed:255.0f/255.0f green:50.0f/255.0f blue:50.0f/255.0f alpha:1.0], nil];
NSLog([NSString stringWithFormat:@"%lu", (unsigned long)[self.usedSliderColors count]]);
self.notificationLabel.backgroundColor = self.usedSliderColors[1];
在上面的场景中,我尝试使用self.usedSliderColors[1]
或数组中的任何其他对象,应用程序中断,并显示数组为空的错误消息。但是如果我在use语句之前加上NSLog
,它会给我3个大小。
另一方面,如果我将色调改为另一个UIColor,它可以工作:
self.usedSliderColors = [NSArray arrayWithObjects: [UIColor blueColor],
[UIColor colorWithRed:255.0f/255.0f green:160.0f/255.0f blue:16.0f/255.0f alpha:1.0],
[UIColor colorWithRed:255.0f/255.0f green:50.0f/255.0f blue:50.0f/255.0f alpha:1.0], nil];
NSLog([NSString stringWithFormat:@"%lu", (unsigned long)[self.usedSliderColors count]]);
self.notificationLabel.backgroundColor = self.usedSliderColors[1];
所以我的问题是,如果有人知道解决方法,或者我是否犯了一些愚蠢的错误?
答案 0 :(得分:3)
您需要在temp
为nil
时解决方案,因为如果发生这种情况,那么这一行:
self.usedSliderColors = [NSArray arrayWithObjects: temp, [UIColor colorWithRed:255.0f/255.0f green:160.0f/255.0f blue:16.0f/255.0f alpha:1.0], [UIColor colorWithRed:255.0f/255.0f green:50.0f/255.0f blue:50.0f/255.0f alpha:1.0], nil];
与此相同:
self.usedSliderColors = [NSArray arrayWithObjects:nil];
是一个包含0个项目的数组,因此索引[1]
超出了绑定范围。
如果你想确定所有3个项目都在你的阵列中,你可以做类似的事情(当然,如果逻辑上适合你的工作流程):
self.usedSliderColors = [NSArray arrayWithObjects: temp?:[UIColor clearColor], [UIColor colorWithRed:255.0f/255.0f green:160.0f/255.0f blue:16.0f/255.0f alpha:1.0], [UIColor colorWithRed:255.0f/255.0f green:50.0f/255.0f blue:50.0f/255.0f alpha:1.0], nil];
因为这在语法上完全适合在数组中使用3种颜色,现在索引[1]
存在 - 您想稍后引用它。
答案 1 :(得分:2)
您的temp
颜色可能为零。在将其添加到数组中之前尝试NSLog
。
答案 2 :(得分:1)
如果在访问数组的第二个元素之前执行os.kill()
,则会看到计数为0。
这里发生的事情是NSLog(@"%lu", (unsigned long)self.usedSliderColors.count);
是tintColor
,这意味着没有元素被添加到您的数组中。