当我将tintColor放入其中时,Objective-C数组中断

时间:2016-02-29 16:44:43

标签: ios objective-c arrays

今天我遇到了一个问题:NSArrayNSMutableArray。当我将应用程序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];

所以我的问题是,如果有人知道解决方法,或者我是否犯了一些愚蠢的错误?

3 个答案:

答案 0 :(得分:3)

您需要在tempnil时解决方案,因为如果发生这种情况,那么这一行:

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,这意味着没有元素被添加到您的数组中。