我有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。
我正在使用stoaryborads,而且我在两部手机上使用相同的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?
有什么想法吗?
答案 0 :(得分:1)
没有理由
news = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];
cellForRowAtIndexPath
中的。您已经在之前的新闻中加载了数据。
您也可以尝试添加缓存策略
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5.0];
===
我认为您在访问新闻时收到错误[CFArray respondsToSelector:]: message sent to deallocated instance 0xa3b4b70
的原因是因为它尚未分配。 tableview第一次加载新闻时为nil,当你执行objectAtIndex时,你会收到一个错误。尝试在viewDidLoad中执行alloc init news或者进行延迟加载以确保new在第一次访问时不是nil,或者在执行objectAtIndex之前可以检查是否为nil。
答案 1 :(得分:-1)
1>在新闻数组中获取数据时重新加载表。 因为没有reloaddata,表不会反映数据。
2 - ;删除数据库文件清理构建并再次运行