2012-03-31 2 views
0

OK 이렇게하면 간단 할 거라고 생각 했어. 그러나 그것은 나를 트립하고있어. 내가 뭔가를 놓친 것 같아.하지만 너희들이 날 도와 줄 수 있니? 나는 nsarray에서 객체 (uiimageviews)의 알파 값을 변경하려고합니다. 지금까지 내가 가진 :NSArray iOS SDK에서 객체의 알파 값 변경하기

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

그냥 나쁜 액세스를 던졌습니다 ... 어떤 아이디어?

+0

가 확실 배열이'alphaSet' 할당되어 있습니까 사용할 수 있습니다 당신이 데이터로 채우기 전에'alloc'을 사용하여? 오류는 배열의 범위를 벗어나고 있다고 말합니다. 할당되지 않은 항목이 없으면 액세스가 잘못 될 수 있으므로 배열의 범위를 벗어났습니다. – antf

+1

배열의 첫 번째 개체를 건너 뛰는 특별한 이유가 있습니까? (즉, 인덱스 0에있는 객체) – sooper

+0

이름 지정 제안 : "alphaSet"은 NSArray가 아닌 NSSet의 인스턴스처럼 들립니다. 나는 여기에'alphaViews' 또는'alphaList'를 제안 할 것입니다. –

답변

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 .. [array count]의 일반적인 for-loop는 무해하게 실행되지 않지만 빈 배열에서 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"];