我想先调用webservice然后生成表格视图,我怎么能做到这一点请帮助我。
问问题
136 次
2 回答
0
只需调用 Web 服务,当它结束加载时,将响应的对象放入一个数组中,然后传回调用服务的类,用您的数据源数组替换对象数组并调用 [tablview reloadData];
于 2012-05-07T15:06:01.097 回答
0
为此,可以执行以下操作:
首先在您的视图控制器中创建一个属性,该属性将保存您将从 Web 服务接收到的数据,如下所示:
@property (strong,nonatomic) NSMutabledata *theData;
然后在你的实现文件中合成它,使用
@synthesize theData = _theData;
接下来你需要设置一个 NSURLConnection,它实际上会从你的 web 服务加载数据:
NSURL *theURL = [NSURL urlWithString:@"http://thisisyourwebservice.com/somethinghere"];
NSURLRequest *theRequest = [NSURLRequest requestWithURL:theURL];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:theRequest delegate:self];
您可以在 viewDidLoad 方法或自定义设置方法中进行设置。如果您希望此连接是可取消的,例如当有人关闭您的视图时,您需要为它添加一个属性,就像您为数据所做的那样。
到目前为止,这将创建一个连接,它将自动开始从给定的 URL 下载您的数据。但是目前您的数据将无处可去,因为您还没有实现 NSURLConnectionDataDelegate 协议。您可以按如下方式执行此操作:
在您的头文件中执行以下操作:
@implementation YourViewControllerClass : UIViewController <NSURLConnectionDataDelegate>
现在您需要在视图控制器中实现一些委托方法,这样您就可以实际接收数据并将其存储以供以后使用。那些将是:
/* you received a response, so now initialize the NSMutableData object */
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
/* this should work in ARC, without ARC you would have to add autorelease after init, else you will have a leak */
self.theData = [NSMutableData alloc] init];
}
/* here you will actually receive data */
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.theData appendData:data];
}
/* now your connection has finished loading */
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
/* depending on what you are loading, you need to convert your data into an object
you of your choice. if you loaded JSON, then use one of the JSONparsers like
SBJSON, JSONKit or the NSJSONSerialization class available since iOS 5.0.
After converting your data to the expected object type you will assign it to the
property which you are using as datasource for your tableView.
*/
}
现在,在加载连接后,您实际上应该在视图控制器中拥有一个包含所需数据的属性。现在只需使用重新加载您的 tableView[yourTableView reloadeData]
就可以了!
于 2012-05-07T16:55:16.580 回答