我正在调用WCF服务以在UITableViewController中显示数据.m文件中的代码是:
- (void)viewDidLoad
{
[super viewDidLoad];
[docTable setDataSource:self];
[docTable setDelegate:self];
}
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
EDViPadDocSyncService *service = [[EDViPadDocSyncService alloc]init];
EDVCategory *cat = [EDVCategory alloc];
cat.categoryId = [catId intValue];
[service getDocsByCatId:self action:@selector(getDocsByCatIdHandler:) category:cat];
[docTable reloadData];
}
- (void) getDocsByCatIdHandler: (id)value
{
if([value isKindOfClass:[NSError class]])
{
NSLog(@"%@", value);
return;
}
if([value isKindOfClass:[SoapFault class]])
{
NSLog(@"%@", value);
return;
}
NSMutableArray* result = (NSMutableArray*)value;
NSMutableArray *documentList = [[NSMutableArray alloc] init];
self.myDocList = [[NSMutableArray array] init];
for (int i = 0; i < [result count]; i++)
{
EDVDocument *docObj = [[EDVDocument alloc]init];
docObj = [result objectAtIndex:i];
[documentList addObject:[docObj docName]];
}
self.myDocList = documentList;
[docTable reloadData];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
int cnt = [self.myDocList count];
NSLog(@"ABC=%@",cnt);
return [self.myDocList count];
//return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
DocumentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DocumentCell"];
if (cell == nil)
{
cell = [[[DocumentCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DocumentCell"] autorelease];
}
NSLog(@"cell text=%@",[self.myDocList objectAtIndex:indexPath.row]);
cell.lblDocName.text = [self.myDocList objectAtIndex:indexPath.row];
return cell;
}
我正在使用storyboard。我已经挂钩了“docTable”,为“docTable”设置了数据源和委托。问题是,在调用“numberOfRowsInSection”之后调用该服务。所以,'return [self.myDocList count]'是0.我已将 [docTable reloadData] 放在 viewWillAppear 以及服务中处理程序,即“getDocsByCatIdHandler”。但它没有像预期的那样重新加载。我还有什么可以尝试的吗? 编辑: - 这是一个Master-Detail应用程序。我使用相同的代码在“MasterViewController”UITableViewController中加载数据并且它可以工作。当用户选择此表中的单元格时,我需要填充通过调用WCF服务在第二个tableview中的数据。第二个tableview不显示数据。
答案 0 :(得分:0)
一切看起来都很好,这让我相信你没有从你期望的网络服务中获得结果。
首先,一件小事不是你的问题。如果result实际上是一个数组,并且其中有一个对象,则不需要分配新的EDVD文档。
EDVDocument *docObj = [result objectAtIndex:i];
您可以记录(id)值参数以查看我们正在使用的内容吗?
NSLog(@"%@", value);
如果值不是一个数组,那么演员不会抱怨,它会因为不工作而起作用。但是,如果它是一个数组,您可能会发现将属性(授予我不知道它的声明方式)分配给本地数组的问题。您可以使用以下函数创建一个包含临时数组元素的新数组;
self.myDocList = [[NSArray alloc] initWithArray:documentList];
[docTable reloadData];
我希望这会有所帮助。
答案 1 :(得分:0)
当我有异步webService调用时,我遇到了同样的问题。我使用私有库来调用webservice,所以我的控件进入库,在响应到来之后,Appdelegate中的方法被设置为处理程序。因此,您需要做的是在调用Webservice之前将tableview的状态保存在共享变量中,并在收到响应后将其设置回tableView然后调用reload方法。如下所示:
SharedView.tblView = self.tableView;
[webservice Call];
After Response:
self.tableView = SharedView.tblView;
[self.tableView reloadData];
希望这有助于。