TableView загружает строки из веб-службы - PullRequest
0 голосов
/ 11 августа 2011

Я пытаюсь загрузить строки из своего веб-сервиса в объект табличного представления в проекте iPhone с помощью xCode.

Я использую метод viewDidLoad для загрузки элементов, в этом методе я вызываю свой веб-сервис с этим кодом:

eenAccesoCupon* Servicio = [[eenAccesoCupon alloc] init];  

Servicio.logging=NO;
[Servicio GetCuponesEntrantes:self action:@selector(GetCuponesEntrantesHandler:) UsuarioActivo: 4];

У меня есть NSMutableArray (называемый listOfItems), который я использую для загрузки строк в TableView. Если я добавлю элементы в этот массив в GetCuponesEntrantesHandler, в табличном представлении не будет отображено ни одной строки. Исходный код этого обработчика следующий:

(void) GetCuponesEntrantesHandler: (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* listOfItems = (NSMutableArray*)value;

}

Кажется, что строки TableView загружаются до вызова веб-метода, поэтому методы табличного представления, такие как numberOfRowsInSection и cellForRowAtIndexPath, вызываются до вызова веб-сервисов. Если я загружаю элементы строк в viewDidLoad следующим образом:

(void)viewDidLoad {
    [super viewDidLoad];

    //Initialize the array.
    listOfItems = [[NSMutableArray alloc] init];

    //Add items
    [listOfItems addObject:@"Iceland"];
    [listOfItems addObject:@"Greenland"];
    [listOfItems addObject:@"Switzerland"];
    [listOfItems addObject:@"Norway"];
    [listOfItems addObject:@"New Zealand"];
    [listOfItems addObject:@"Holland"];
    [listOfItems addObject:@"Ireland"];

    //Set the title
    self.navigationItem.title = @"Countries";

    eenAccesoCupon* Servicio = [[eenAccesoCupon alloc] init];

    Servicio.logging=NO;
    [Servicio GetCuponesEntrantes:self action:@selector(GetCuponesEntrantesHandler:) UsuarioActivo: 4];
    }

В этом случае объект tableview показывает только эти 7 значений, загружаемых в listOfItems, никогда не загружайте никаких элементов из GetCuponesEntrantesHandler.

Кто-нибудь знает в чем проблема?

1 Ответ

0 голосов
/ 11 августа 2011

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

[tableView reloadData]

в конце метода-обработчика, сразу после присваивания

NSMutableArray* listOfItems = (NSMutableArray*)value;
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...