好的,所以我觉得这很简单,但它让我感到沮丧..我确定我只是错过了一些简单的东西,但是你能帮助我吗?我试图在nsarray中更改对象的alpha值(uiimageviews)。到目前为止,我得到了:
for (int i=1; i < [alphaSet count]; i++) {
[[alphaSet objectAtIndex:i] setAlpha:masterAlpha];
}
它只会引发糟糕的访问......任何想法?
答案 0 :(得分:1)
使用NSLog
确保您的图片视图在那里。
for (int i=1; i < [alphaSet count]; i++) {
NSLog(@"At count %i there is this object: %@", i, [alphaSet objectAtIndex:i]);
UIImageView *iv = [alphaSet objectAtIndex:i];
iv.alpha = masterAlpha;
}
答案 1 :(得分:1)
首先,我不确定你为什么要跳过第一个索引。假设这是一个错误,请检查您的代码并验证它是否与以下内容匹配:
<强> NSArrayDeclaration 强>
NSArray * alphaSet;
//Your code for objects
masterAlpha声明
float masterAlpha = 0.5; //Whatever value you have
Alpha更改
for (int i = 0; i < [alphaSet count]; i++) {
UIImageView * imageView = [alphaSet objectAtIndex:i];
imageView.alpha = masterAlpha;
}
答案 2 :(得分:1)
我打赌这个数组是空的。从0 .. [数组计数]的典型for循环将无法无害地运行,但在空数组上从index = 1计数是一个“错误访问”崩溃。
因此,需要查看的代码是初始化alphaSet的代码。同时,一个更好的枚举方法是这样的:
for (UIImageView *imageView in alphaSet) {
imageView.alpha = masterAlpha;
}
这对眼睛来说更快,更容易,并且它永远不会在阵列边界上崩溃。但是在找到alphaSet为空的原因之前,你不会在UI中产生任何影响。
答案 3 :(得分:1)
使用快速枚举更安全,也更快
相反,如果
for (int i = 0; i < [alphaSet count]; i++) {
// do work
}
使用
for (UIImageView *imageView in alphaSet) {
// do work
}
这样可以消除一个错误和错误初始化的可能性,就像你的例子一样。
对于这个例子,因为你只做了一件事,你根本不需要设置for循环而是可以使用
[alphaSet setValue:[NSNumber numberWithFloat:masterAlpha] forKey:@"alpha"];