Iphone NSMutable数组:获取;“超出范围”;可变复制后的状态

Iphone NSMutable数组:获取;“超出范围”;可变复制后的状态,iphone,xcode,soap,nsmutablearray,sudzc,Iphone,Xcode,Soap,Nsmutablearray,Sudzc,我有一个SOAP服务,我在上面生成了类和函数 因此,我使用它们生成的soap函数,它返回一个NSMutableArray,其中的对象由我的自定义类继承(也由它们生成) 到目前为止一切都很好。我的值进入数组,我可以看到任何对象的任何属性,但条件只有一个:仅在处理服务的函数内部 为了明确起见,以下是代码: - (void)viewDidLoad { SDZGeneratedWebService* service = [SDZGeneratedWebService service];

我有一个
SOAP
服务,我在上面生成了类和函数

因此,我使用它们生成的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
数组的值),但所有对象都“
超出范围
”。所以我不能用它们

我还尝试通过
for循环中的索引复制所有对象
,不,对象正在获取它们的值,但当我“
addObject
”到
myDataArray
时,同样,
超出范围

这里怎么了?我不能用这种方法生成自定义类的数组吗

编辑:生成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)

可以使用以下方法将对象从一个阵列复制到另一个阵列:

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

在代码中,您应该删除以下行:
[myobjectrelease]
我最好调用
[((NSMutableArray*)result)count]
而不是使用点符号。

在创建这两个数组的地方发布代码-源和dst。我想它们在调试器中显示为“超出范围”,对吗?您是否尝试通过编程方式访问它们?它会引发异常吗?@Nekto,我编辑了问题并添加了代码。@EricMORAND,对,我在调试器中检查它们,但我也会填充表格,标签上有文本“Label”。如果我弄错了,我会再次检查???为什么不
[myDataArray addObject:myObject]?您不需要释放它=删除
[myObject release](NSMutableArray*)结果中
NSArray *source;
NSArray *dst = [[NSArray alloc] initWithArray:source];