ipad splitview导航应用程序中的didSelectRowAtIndexPath中的indexPath null

时间:2011-03-01 15:04:49

标签: objective-c ios ipad didselectrowatindexpath

我正在将一个相当简单的基于iPhone导航的应用程序移植到Split View iPad应用程序 我在主视图上有两个嵌套的导航级别。用户从第一个表中选择一个值,然后加载第二个表。在第二个表上选择一个值会加载详细信息视图的Detail项。或者它应该是。我的第二个控制器上的didSelectRowAtIndexPath正在触发,但indexPath为null。

我非常密切地关注SplitView模板。通过添加第二个TableViewController,我真的只是走出了人迹罕至的地方。我的RootViewController在didSelectRowAtIndexPath上加载第二个TableViewController,那部分正在工作。在我的第二个TableViewController.m中,我正在尝试为DetailView设置详细信息项。但是那就是那个没有给我行的didSelectRowAtIndexPath方法。我对此很新,但对我来说,单击一行的方法会触发但没有该行的索引似乎很奇怪。

以下是代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate];
    detailViewController.thisRequest = [appDelegate.requests objectAtIndex:indexPath.row];
    NSLog(@"Request Loaded: %@", detailViewController.thisRequest.Title);
    NSLog(@"Index Row: %@", indexPath.row);
    [appDelegate release];

}

请求数组正在正确加载(appDelegate.requests),但我的objectAtIndex失败,因为indexPath为null。或者至少indexPath.row为null。

编辑:好的,下面的评论是正确的,我没有正确使用NSLog。 indexPath.row很好(我认为它在调试器中使用鼠标悬停也显示为null,但我只是不知道如何正确使用调试器。)

由于某种原因,detailViewController属性未正确设置。如果我用这个代替:

//detailViewController.thisRequest = [appDelegate.requests objectAtIndex:indexPath.row];
Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row];

aRequest对象加​​载得很好。所以下一个问题是为什么在我的detailViewController对象上设置我的属性不起作用。在这种环境中,我仍然非常模糊。任何额外的输入都会很棒。

2 个答案:

答案 0 :(得分:2)

indexPath.row的值不是字符串。您无法使用%@进行日志记录。尝试使用%i%li,它们用于整数。此外,您尚未正确检查要加载的请求,afaik。 title属性仅在成功加载后才可用吗?

答案 1 :(得分:1)

  

NSLog(@“Index Row:%@”,indexPath.row);

indexPath是一个NSIndexPath对象,您可以使用%@来打印它 但是 indexPath.row和indexPath.section是NSUInteger。所以你必须使用%u来打印它们。

所以也许你的indexpath.row不是nil(就像没有对象一样)而是0(如零,前面的数字)


选择一个不是第一行的行,你应该崩溃。