Json数据在uitableview ios中没有更新?
Posted
技术标签:
【中文标题】Json数据在uitableview ios中没有更新?【英文标题】:Json data is not updated in uitableview ios? 【发布时间】:2014-11-12 08:48:26 【问题描述】:我正在使用故事板构建一个 ios 文章阅读应用程序。我正在使用 AFNetworking 库来解析表格视图中的 json。
我面临一个问题,即更新的文章未显示在表格视图中,这意味着如果在 json 中添加了新文章但未在我的表格视图中更新。
这是我的代码:
- (void)viewDidLoad
[super viewDidLoad];
[self.tableView reloadData];
x=2;
tempJson = [[NSMutableArray alloc] init];
[self.tableView reloadData];
NSString *jsonLink=[NSString stringWithFormat:@"http://cccccc.com/json.php?token=hashg156349&page=1"];
NSURL *url = [[NSURL alloc] initWithString:jsonLink];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30.0];
[request setTimeoutInterval:120];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
NSArray *jsonArray = (NSArray *)responseObject;
dispatch_async(dispatch_get_main_queue(), ^
for (NSDictionary *dic in jsonArray)
Json *json = [[Json alloc] initWithDictionary:dic];
[tempJson addObject:json];
self.jsons = [[NSArray alloc] initWithArray:tempJson];
// tempNinjas = nil;
[self.tableView reloadData];
self.tableView.separatorColor = [UIColor colorWithRed:190/255.0 green:190/255.0 blue:190/255.0 alpha:1.0];
);
);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
];
[operation start];
【问题讨论】:
你能告诉我们你的 TableViewDataSource 方法吗? 此代码仅在创建此视图时运行一次 (viewDidLoad),您可能希望在每次显示视图时更新数据 (viewDidAppear),或者如果用户可以刷新数据,则更频繁地更新数据下拉刷新操作 感谢@dirgroten 是的,我想在每次显示视图时更新数据。 每次点击 tableview 时最好在 viewWillAppear 中使用此代码重新加载或将此代码留在 ViewDidLoad 和 viewWillAppear 下使用 [self.tableView reloadData]; @ShashankBohra 这不能解决您的问题。好像数据源没有设置为self.json数组。 【参考方案1】:首先尝试从服务器调用您的数据并获取数据。之后,使用您获取的数据加载您的表格视图,如下所示。
-(void)viewWillAppear
x=2;
tempJson = [[NSMutableArray alloc] init];
NSString *jsonLink=[NSString stringWithFormat:@"http://cccccc.com/json.php?token=hashg156349&page=1"];
NSURL *url = [[NSURL alloc] initWithString:jsonLink];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30.0];
[request setTimeoutInterval:120];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
NSArray *jsonArray = (NSArray *)responseObject;
dispatch_async(dispatch_get_main_queue(), ^
for (NSDictionary *dic in jsonArray)
Json *json = [[Json alloc] initWithDictionary:dic];
[tempJson addObject:json];
self.jsons = [[NSArray alloc] initWithArray:tempJson];
// tempNinjas = nil;
self.tableView.separatorColor = [UIColor colorWithRed:190/255.0 green:190/255.0 blue:190/255.0 alpha:1.0];
);
);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
];
[operation start];
[self.tableView reloadData];
【讨论】:
为什么这应该可以解决问题?他说调用 reloadData 时,数据已正确加载到数组中。 我认为 self.jsons = [[NSArray alloc] initWithArray:tempJson];没有更新。因为它只调用一次。这样他就可以再次获取数据并尝试 @Sport 我也在 -(void)viewWillAppear 中这样做了,但它不起作用。我认为它在 uitableview 中加载缓存数据而不是更新数据。 你检查过 viewDidLoad 和 viewWillAppear 里面的相同数据。请使用断点并检查 tempJson 和 self.jsons 是什么 是的,我已经检查过它是一个 AFNetworking 缓存策略问题以上是关于Json数据在uitableview ios中没有更新?的主要内容,如果未能解决你的问题,请参考以下文章
在iOS中单击按钮时如何在UITableView中获取特定的JSON数据(目标c)?
UIViewController中的UITableView不显示json?