NSMutable Array: Выход из состояния вне области после изменяемого копирования - PullRequest
0 голосов
/ 06 октября 2011

У меня есть служба 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)

1 Ответ

0 голосов
/ 06 октября 2011

Вы можете копировать объекты из одного массива в другой, используя этот метод:

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

В вашем коде вы должны удалить строку: [myObject release];, и я бы лучше назвал [((NSMutableArray *)result) count], а не с использованием точечной нотации.

...