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,不,内部数组仍然可以,但myDataArray的对象“超出范围”。显示如何将对象添加到(NSMutableArray*)结果中
NSArray *source;
NSArray *dst = [[NSArray alloc] initWithArray:source];