为什么我在iPhone 4s和iPhone 5中获得不同的输出?

时间:2013-07-09 11:47:03

标签: ios objective-c uitableview

我有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?

有什么想法吗?

2 个答案:

答案 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 - ;删除数据库文件清理构建并再次运行