NSMutableArray:在Mutable Copying之后获得“超出范围”状态

时间:2011-10-06 09:22:46

标签: iphone xcode soap nsmutablearray sudzc

我有一个SOAP服务,我在SudzC.com上生成了类和函数。

所以我使用他们生成的soap函数,它返回一个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
}
像我说的那样,到目前为止一切都很完美。但是我需要使用此函数之外的数据。

因此,在我的.h文件中,我创建了一个类似NSMutableArray *myDataArray;

的数组

当我打算将result数组复制到myDataArray时,它会复制对象(我可以看到myDataArray.count值等于result数组)但是所有对象是“out of scope”。所以我不能使用它们。

我还尝试按for loop中的索引复制所有对象,nope,对象获取其值,但当我“addObject”到myDataArray时,同样,{{ 1}}。

这里有什么问题?我不能以这种方式生成自定义类的数组吗?

编辑:我正在生成myDataArray的代码:

out of scope

我之前尝试过这种方式:

    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)

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法将对象从一个数组复制到另一个数组:

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

在您的代码中,您应该删除行:[myObject release];,我最好调用[((NSMutableArray *)result) count],而不是使用点表示法。