2012-03-31 21 views
0

好吧,我認爲這會很簡單,但它讓我絆倒了......我確信我只是錯過了一些簡單的東西,但是你們能幫助我嗎?我試圖在nsarray中更改對象的alpha值(uiimageviews)。到目前爲止,我得到了:更改NSArray iOS SDK中對象的alpha值

for (int i=1; i < [alphaSet count]; i++) { 
    [[alphaSet objectAtIndex:i] setAlpha:masterAlpha]; 
} 

它只是拋出糟糕的訪問...任何想法?

+0

你確定數組'alphaSet'分配在用數據填充之前使用'alloc'?這個錯誤表明你正在超出數組的範圍,這可能是它的一個原因,因爲如果它沒有被分配,你將不會有任何項目,你將有不良的訪問。 – antf 2012-03-31 21:08:42

+1

您要跳過數組中的第一個對象的任何特定原因? (即索引爲0的對象) – sooper 2012-03-31 21:15:52

+0

命名建議:「alphaSet」聽起來像是「NSSet」的實例,而不是「NSArray」。我建議'alphaViews'或'alphaList'。 – 2012-03-31 22:20:12

回答

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

首先,我不確定你爲什麼跳過第一個索引。假設這是一個錯誤,請檢查你的代碼,並驗證它具有下列相匹配:

NSArrayDeclaration

NSArray * alphaSet; 
//Your code for objects 

masterAlpha宣言

float masterAlpha = 0.5; //Whatever value you have 

阿爾法變化

for (int i = 0; i < [alphaSet count]; i++) { 
    UIImageView * imageView = [alphaSet objectAtIndex:i]; 
    imageView.alpha = masterAlpha; 
} 
1

我打賭數組是空的。從0 .. [數組數]的典型for循環將無法無害地運行,但從空數組的index = 1開始計數是「不良訪問」崩潰。

所以需要查看的代碼是初始化alphaSet的代碼。同時,更好的方式來枚舉它是這樣的:

for (UIImageView *imageView in alphaSet) { 
    imageView.alpha = masterAlpha; 
} 

這是速度更快,對眼睛更容易,它不會在數組邊界崩潰。但是,除非你知道alphaSet爲什麼是空的,否則你不會在UI中產生任何效果。

1

它是更安全,也更快地使用快速列舉

相反,如果

for (int i = 0; i < [alphaSet count]; i++) { 
    // do work 
} 

使用

for (UIImageView *imageView in alphaSet) { 
    // do work 
} 

這一個錯誤和不正確初始化刪除掉的機會,就像在你例。


在這個例子中,你只能做一件事情,你不需要建立在所有循環,可以改用

[alphaSet setValue:[NSNumber numberWithFloat:masterAlpha] forKey:@"alpha"];