【发布时间】:2013-07-09 11:47:02
【问题描述】:
我有 UITableView,我在其中显示用户列表。现在为了检查目的,我正在显示用户 ID。下面是我正在使用的代码。
-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// new is JSON data of list of users...
news = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
if (cell==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MainCell"];
}
// here in cell I have code to assign data...
UILabel *myTextLabel = (UILabel*)[cell viewWithTag:9999999999];
NSLog("id is ===%@===", [[news objectAtIndex:indexPath.row] objectForKey:@"id"]);
myTextLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"id"];
return cell;
}
当我在 iPhone 4s 上运行它时,我得到以下输出。
id is ===4===
id is ===3===
id is ===2===
id is ===1===
现在我从数据库中手动删除 id 2 并刷新列表。
我得到的输出为
id is ===4===
id is ===3===
id is ===1===
现在我在 iPhone 5(所有 4 个 id)上运行它并获得以下数据....
id is ===4===
id is ===3===
id is ===2===
id is ===1===
现在我手动删除 2 并重新加载列表。
id is ===4===
id is ===3===
id is ===2===
id is ===1===
我仍然得到上述内容。我仍然在列表中获得 2...
为什么我在这里得到两个不同的输出?
尤其是 iPhone 5 正在提供旧输出。
在 iPhone 4 和 iPhone 5 中,我有 iOS 6。
我正在使用 stoaryboards,并且我在两部手机上使用相同的 stoaryboard。
我正在更新数据的代码...
// everytime I am updating list...
-(void) viewWillAppear:(BOOL)animated {
[self getMyData];
}
-(void) getMyData {
NSLog(@"getMyData...");
mainTableView.hidden = YES;
self.indicator.hidden = NO;
[self.indicator startAnimating];
NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com/xxxx/getBuildingInfoSama.php"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
self.indicator.hidden = NO;
[self.indicator startAnimating];
news = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];
[mainTableView reloadData];
self.indicator.hidden = YES;
[self.indicator stopAnimating];
mainTableView.hidden = NO;
}
- (int) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section {
int totalNum = news.count;
NSLog(@"rows to return %d", totalNum);
return totalNum;
}
NSLog 说...
2013-07-09 18:50:39.127 SAMA[38573:19d03] getMyData...
2013-07-09 18:50:39.131 SAMA[38573:19d03] rows to return 0
2013-07-09 18:50:39.530 SAMA[38573:19d03] didReceiveResponse
2013-07-09 18:50:39.530 SAMA[38573:19d03] didReceiveData
2013-07-09 18:50:39.531 SAMA[38573:19d03] connectionDidFinishLoading
2013-07-09 18:50:39.532 SAMA[38573:19d03] rows to return 4
主要更新
当我在我的一个朋友 iPhone 5 上运行相同的代码时,它运行良好。没有上述问题。
这意味着,我的应用程序也应该可以在 iPhone 5 上运行。
但问题仍然存在,为什么这在我的客户端 iPhone 5 中不起作用?
有什么想法吗?
【问题讨论】:
-
您的 iPhone 4S 和 iPhone 5 上的 iOS 版本是什么?您是否为 Retina 3.5 和 Retina 4 使用了不同的 XIB 文件?你能展示你用来从 UITableView 中删除行的代码吗?
-
@hohanghk :我已经更新了问题.. 对于删除,我有将参数传递给 PHP 的代码。就我而言,代码不是问题......
-
我认为问题出在您的
data。在删除后重新加载表视图之前,它可能会以某种方式缓存/未更新。只要你使用的是同一个iOS版本,我认为iPhone 4S和5应该没有区别。试试NSLog(@"%@", news);,看看它是否包含旧的json数据。 -
@howanghk : 现在没有 iPhone 5。我稍后会检查.. 但是如果新闻没有更新,我该如何禁用 iPhone 5 中的缓存?
-
你能把代码贴在你重新加载tableview的地方吗?同样在删除第二行并停止应用程序并再次运行它之后,您是否仍然在 iPhone 5 上获得所有行?
标签: ios objective-c uitableview