2013-03-03 2 views
1

bool 값이있는 NSArray가 있습니다. NSArray * boolResults = [super foo : values]; 어떻게 셀 0의 값을 변경할 수 있습니까?bool 값을 NSArray에 재 할당

나는 다음을 시도 : boolResults [0] = @NO; 이 결과 오류 : 배열 요소 물품 예상 방법은 유형의 객체에없는 '있는 NSArray *'

또한 본 : BOOL의 *를 B = & [배열 objectAtIndex : I] boolValue]; 에 다음과 같은 오류가 있습니다. 주소 표현식은 좌변 값 또는 함수 지정 문자 여야합니다.

이 값을 설정하려면이 NSArray를 NSMutableArray로 변환하지 않으려 고합니다. 정상적인 방법입니까?

감사

답변

1

번호 NSArray의 불변이다. NSArray 수정 된 배열에 포인터를 다시 할당 할 수 있습니다.

NSArray *anArray = [super foo:values] 
NSMutableArray *mutableCopy = [anArray mutableCopy]; 
// change your mutable copy and then reassign 
anArray = [mutableCopy copy]; 

그리고 단지 같은 NSArray

, NSNumber들도 불변, 그래서 [anArray[0] setBoolValue:NO] 같은 존재하지 않습니다.

4

배열을 변경할 수없는 경우, 당신은 그 값을 변경할 수 없습니다. 솔루션은 두 가지입니다.

  1. 배열을 변경할 수있게 만듭니다.
  2. 배열에 변경 가능한 객체가 포함되도록하십시오.

가변 배열을 사용하고 싶지 않으므로 두 번째 솔루션을 예로 들어 보겠습니다. 표준 프레임 워크에는 변경 가능한 번호가 없으므로이를 NSMutableData로 포장합니다. 이 예는 값 @YES으로, 하나의 객체 배열을 가지고 있음을 가정한다, 당신은 @NO로 변경하려면 :

NSNumber* number= @YES; 
NSMutableData* data=[[NSMutableData alloc]initWithData: [NSKeyedArchiver archivedDataWithRootObject: number]]; 
NSArray* array= @[data]; // Now you have an array with a single value 
// You want to change the first value to @NO: 
number= @NO; 
[array[0] setData: [NSKeyedArchiver archivedDataWithRootObject: number]]; 
+1

'boolResult'가'NSMutableArray' 인 경우'boolResults [0] = @NO;'는 정확합니다. – Sebastian