我尝试使用xCode将我的Web服务中的行加载到iPhone项目中的tableview对象中。
我使用viewDidLoad方法来加载项目,在这个方法中我使用以下代码调用我的Web服务:
eenAccesoCupon* Servicio = [[eenAccesoCupon alloc] init];
Servicio.logging=NO;
[Servicio GetCuponesEntrantes:self action:@selector(GetCuponesEntrantesHandler:) UsuarioActivo: 4];
我有一个NSMutableArray(名为listOfItems),用于将行加载到TableView。如果我将此数组中的项添加到GetCuponesEntrantesHandler中,则tableview不会显示任何行。此处理程序的sourceCode如下:
(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;
}
似乎在调用Web方法之前加载了TableView行,因此,在调用Web服务之前调用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对象只显示listOfItems中的这7个值加载,从不加载GetCuponesEntrantesHandler中的任何项。
有人知道这是什么问题吗?
答案 0 :(得分:0)
我认为GetCuponesEntrantes:方法异步使用网络。这意味着一旦表视图已加载并显示,它将调用处理程序。 要强制表视图重新加载,只需调用:
[tableView reloadData]
在 NSMutableArray* listOfItems = (NSMutableArray*)value;赋值之后,
在处理程序方法的末尾。