Проблема переменной области - PullRequest
0 голосов
/ 17 июня 2011

Это может быть потому, что это был долгий день ... но у меня возникли некоторые основные проблемы с областью видимости. Я создаю объект, передаю его в метод делегата и добавляю его в массив с методом.

Когда я проверяю значение устройства в методе, оно содержит информацию об устройстве. Вот код для функции делегата в классе, который зарегистрировал делегата:

- (void) newAmeriscanDevice:(AmeriscanDevice *)device {
    if (!self.deviceArray)
        self.deviceArray = [[NSMutableArray alloc] init];

    // add the newly created device...
    [self.deviceArray addObject:device];
}

Этот метод относится к тому же классу, что и предыдущая функция. DeviceArray показывает, что он содержит один объект (предполагается, что это объект драйвера сверху). Когда я смотрю на значение объекта устройства здесь, оно всегда 0x0.

- (void) endDevices:(NSNumber *)numberOfDevices {

    // get out of here is there is no device in the device array
    if (!self.deviceArray)
        return;

    // lets sort the array by order of the devices sort order
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
    NSArray *sortDescriptorArray = [NSArray arrayWithObject:sortDescriptor];

    // the array should now be sorted correctly...
    [self.deviceArray sortUsingDescriptors:sortDescriptorArray];

    // we now have data -- so.... lets reload the table
    [self.tableView reloadData];

}

Итак .... есть идеи, как убедиться, что объект в массиве сохраняет свои значения?

Спасибо всем

Mike

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

Я ошибся с моей оценкой.Я смотрел на значения отладчика при наведении курсора на массив.Было бы показать, что был один объект и указатель объекта был 0x0.Я изменил код:

- (void) endDevices:(NSNumber *)numberOfDevices {

    // get out of here is there is no device in the device array
    if (!self.deviceArray)
        return;

    NSLog(@"Array Count: %i", [self.deviceArray count]);
    for (id object in self.deviceArray) {
        if (object == nil) {
            NSLog(@"Nil Object");
        } else {
            AmeriscanDevice *dev = (AmeriscanDevice *)object;
            NSLog(@"Device: %@", [dev description]);
        }

    }

    // lets sort the array by order of the devices sort order
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
    NSArray *sortDescriptorArray = [NSArray arrayWithObject:sortDescriptor];

    // the array should now be sorted correctly...
    [self.deviceArray sortUsingDescriptors:sortDescriptorArray];

    // we now have data -- so.... lets reload the table
    [self.tableView reloadData];

}

Как только я изменил этот код, он показал, что объект в массиве был лицом к объекту правильного типа.

Моя проблема была в отображении таблицы.Очевидно, что метод cellForRowAtIndexPath не вызывается в таблице, когда я вызывал reloadData или когда представление впервые показывается.Я создал это табличное представление, используя xcode 4, поэтому я направляюсь в xib-файл, чтобы увидеть, что не связано:)

0 голосов
/ 17 июня 2011

написать код примерно так

 - (void) newAmeriscanDevice:(AmeriscanDevice *)device {
        if (!self.deviceArray)
        {
            NSMutableArray *tempArray= [[NSMutableArray alloc] init];
            self.deviceArray=tempArray;
   [tempArray release];
     }


        [self.deviceArray addObject:device];





    }

И проверьте, где вы освобождаете массив или любую ссылку, которая имеет такое же местоположение (любой другой освобожденный массив, в который вы копируете массив с помощью оператора '='). Выпустите его в dealloc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...