gpt4 book ai didi

ios - 来自服务器的数据未显示在 TableView 中

转载 作者:行者123 更新时间:2023-11-29 11:51:40 24 4
gpt4 key购买 nike

我有 2 个屏幕,在第一个屏幕上,当我单击一个按钮时,它应该转到第二个屏幕,从服务器获取数据并在第二个屏幕的表格 View 中显示。但是使用以下代码我无法在表格 View 中显示数据

#import "FirstTableViewController.h"

@interface FirstTableViewController ()<NSXMLParserDelegate>
@property(nonatomic,strong)NSXMLParser*xmlparse;
@property(nonatomic,strong)NSMutableString*tempstr;
@property(nonatomic,strong)NSMutableArray*arr;

@end

@implementation FirstTableViewController

- (void)viewDidLoad {
[super viewDidLoad];

NSMutableURLRequest*req=[[NSMutableURLRequest alloc]init];
NSURL*url=[NSURL URLWithString:@"http://www.thomas-bayer.com/sqlrest/CUSTOMER/"];
[req setURL:url];
[[[NSURLSession sharedSession]dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// SMXMLDocument *document = [SMXMLDocument documentWithData:data error:&error];

NSString*str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
_xmlparse=[[NSXMLParser alloc]initWithData:data];
_xmlparse.delegate=self;
[_xmlparse parse];
}] resume];
[_table reloadData];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
_tempstr=[[NSMutableString alloc]initWithString:string];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict;{
if([elementName isEqualToString:@"CUSTOMER"]){
self.tempstr=[[NSMutableString alloc]init];

}
if([elementName isEqualToString:@"CUSTOMERList"]){
self.arr=[[NSMutableArray alloc]init];

}

}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName;{

if([elementName isEqualToString:@"CUSTOMER"]){
[_arr addObject:self.tempstr];
self.tempstr=nil;
}
// NSLog(@"arr is %@",self.arr);
}
#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arr.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cel" forIndexPath:indexPath];

cell.textLabel.text=[self.arr objectAtIndex:indexPath.row];
return cell;
}

@end

最佳答案

做两件事

首先

- (void)viewDidLoad {
[super viewDidLoad];

arr = [NSMutableArray array]; // initilize the memory of array

NSMutableURLRequest*req=[[NSMutableURLRequest alloc]init];
NSURL*url=[NSURL URLWithString:@"http://www.thomas-bayer.com/sqlrest/CUSTOMER/"];
[req setURL:url];
[[[NSURLSession sharedSession]dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// SMXMLDocument *document = [SMXMLDocument documentWithData:data error:&error];

NSString*str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
_xmlparse=[[NSXMLParser alloc]initWithData:data];
_xmlparse.delegate=self;
[_xmlparse parse];
}] resume];

}

第二

 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName;{

if([elementName isEqualToString:@"CUSTOMER"]){
[_arr addObject:self.tempstr];
self.tempstr=@"";
}

if(arr.count >0)
{
dispatch_async(dispatch_get_main_queue(), ^{
[_table reloadData];
});

}

}

关于ios - 来自服务器的数据未显示在 TableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com