tableView:cellForRowAtIndexPath:在iphone上测试时无法正常工作

tableView:cellForRowAtIndexPath:在iphone上测试时无法正常工作,iphone,ios,uitableview,nsindexpath,Iphone,Ios,Uitableview,Nsindexpath,目前我有一个uitableview,用户可以滚动浏览并选择一个单元格。选择单元格后,我保存该indexpath值,当用户返回包含uitableview的视图时,我将该indexpath值传递回来,并使用下面的代码在tableView:cellForRowAtIndexPath:内的单元格上打勾 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

目前我有一个uitableview,用户可以滚动浏览并选择一个单元格。选择单元格后,我保存该indexpath值,当用户返回包含uitableview的视图时,我将该indexpath值传递回来,并使用下面的代码在tableView:cellForRowAtIndexPath:内的单元格上打勾

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

//...


//Replaces previously selected cells accessory view (tick)
    if (indexPath == oldCheckedData) 
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        NSLog(@" Tick");
    } 
    else 
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        NSLog(@"No Tick");
    } 
}

奇怪的是,当在模拟器上测试时,它工作得非常完美。。。。然而,当我尝试在手机上测试它时,它从未进入第一个if语句。。。因此,不会添加记号。

我认为您是在比较指针,而不是索引路径。使用以下选项代替“相等”:

[indexPath isEqual:oldCheckedData]

您已经存在了足够长的时间,现在您应该知道如何格式化自己的代码。请将代码格式化为
code
。对不起,刚刚错过了。我刚回到屏幕看到它,然后当我重新加载时,我看到你为我编辑了它。。谢谢你。。很抱歉没有格式化它。。我只是全神贯注于这个问题,没有直接思考:)你把
oldCheckedData设置在哪里?我想我需要再检查一下。。因为我使用此方法从另一个视图设置它-(void)setAccessoryIndexPath:(NSIndexPath*)myLastIndexPath{oldCheckedData=[myLastIndexPath copy];[self.tableView reloadData];},但是当进行另一个选择时,我也会在该视图中更改它的值。hmmm。。。比较NSIndexPath对象的指针,oldCheckedData是原始NSIndexPath对象的副本-模拟器处理地址引用的方式是否与设备不同?也许你应该试着记住索引值本身,而不是整个indexath。成功了!!!!!然而,我对自己有点生气。。我应该发现我昨天在另一个我不得不使用isEqual的领域得到了一些帮助。。但我只是没看到。。。呜呜!非常感谢!:)