У меня есть служба SOAP
, и я сгенерировал классы и функции на SudzC.com .
Так что я использую сгенерированные нами функции мыла, он возвращает 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
Нет, объекты получают свои значения, но когда я "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)