2011-10-06 6 views
0

나는 SOAP 서비스를 가지고 있으며 SudzC.com에 클래스와 함수를 생성했습니다.NSMutable 배열 : 가변 범위 변경 후 상태

그래서 내가 생성 한 비누 함수를 사용하고 있는데, NSMutableArray (내 사용자 지정 클래스에서 상속 한 개체 포함)을 반환합니다.

지금까지 모든 것이 좋습니다. 내 값이 배열로 들어가고 하나의 조건을 가진 객체의 속성을 볼 수 있습니다. 서비스를 처리하는 함수 내부에서만.

- (void)viewDidLoad 
{ 
    SDZGeneratedWebService* service = [SDZGeneratedWebService service]; 
    service.logging = YES; 

    [service callMyData:self action:@selector(callMyDataHandler:) dataId: 1]; 
    [super viewDidLoad]; 
} 

- (void) callMyDataHandler: (id) value { 

    // Handle errors 
    if([value isKindOfClass:[NSError class]]) { 
     NSLog(@"%@", value); 
     return; 
    } 

    // Handle faults 
    if([value isKindOfClass:[SoapFault class]]) { 
     NSLog(@"%@", value); 
     return; 
    }    

    // Do something with the NSMutableArray* result 
    NSMutableArray *result = (NSMutableArray *)value; 
    MyCustomClass *myObject = [result objectAtIndex:0]; 
    NSLog(@"%@", myObject.myProperty); //Works Great 
} 

내가 말했듯이, 지금까지 모든 것이 완벽한 :

은 그냥 명확하게하기 위해, 여기에 코드입니다. 하지만이 함수 밖에서 데이터를 사용해야합니다. 내가 myDataArrayresult 배열을 복사하고자 할 때

그래서 내 .h 파일에, 나는 NSMutableArray *myDataArray;

같은 배열을 만들어, 그 객체가 사본 (내가 볼 수있는 myDataArray.count 값은 result 배열의 동일입니다)하지만, 모든 개체는 "out of scope"입니다. 그래서 나는 그것을 사용할 수 없다.

는 또한, 아니, 객체가 값을 받고되어 for loop에 인덱스 모든 개체를 복사하려고했으나 때 " addObject"같은 myDataArray, out of scope합니다.

여기에 어떤 문제가 있습니까? 이런 식으로 사용자 정의 클래스의 배열을 생성 할 수 있습니까?

편집 : myDataArray 발생하고있어 코드 : 전에이 방법을 시도

myDataArray = [[NSMutableArray alloc] init]; 
    [myDataArray removeAllObjects]; 
    for (int i=0; i<((NSMutableArray *)result).count; i++) { 
     MyCustomClass *myObject = [result objectAtIndex:i]; 
     [myDataArray addObject:myObject]; 
     [myObject release]; 
    } 

    [self.tableView reloadData]; 
} //(End of callMyDataHandler function) 

을 너무 :

[myDataArray removeAllObjects]; 
    duyurular = [result mutableCopy]; 
} //(End of callMyDataHandler function) 
+0

소스 코드와 dst 코드를 모두 만드는 포스트 코드입니다. – Nekto

+0

디버거에서 "범위를 벗어난"것으로 보입니다. 맞습니까? 프로그래밍 방식으로 액세스하려고 시도 했습니까? 예외가 발생합니까? –

+0

@Nekto, 질문을 편집하고 코드를 추가했습니다. – kubilay

답변

0

당신은이 방법을 사용하여 다른 하나 개의 배열에서 개체를 복사 할 수 있습니다 :

NSArray *source; 
NSArray *dst = [[NSArray alloc] initWithArray:source]; 

코드에서 줄을 제거해야합니다 : [myObject release]; 그리고 [((NSMutableArray *)result) count] 대신 도트 표기법을 사용하십시오.

+0

나는 전에도이 방법을 사용했다.어쨌든, NSMutableArrays를 NSArrays로 변경했습니다. 아니요, 여전히 내부 배열은 괜찮지 만 myDataArray의 객체는 "범위를 벗어났습니다". – kubilay

+0

'(NSMutableArray *) result'에 객체를 추가하는 방법을 보여주세요 – Nekto

+0

그럴 필요는 없습니다. 지금 당장은 괜찮습니다 :-) Thanks ... – kubilay