0

我有 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 中不起作用?

任何想法?

4

2 回答 2

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在访问新闻时遇到错误的原因是它尚未分配。表格视图第一次加载新闻时为 nil,当你执行 objectAtIndex 时,你会得到一个错误。尝试在 viewDidLoad 中执行 alloc init news 或执行延迟加载以确保 new 在第一次被访问时不为零,或者您可以在执行 objectAtIndex 之前检查是否为 nil。

于 2013-07-09T12:19:57.720 回答
-1

1> 在新闻数组中获取数据时重新加载表。因为没有reloaddata,表是不反映数据的。

2> 删除数据库文件 clean build 并再次运行

于 2013-07-09T12:17:42.620 回答