didSelectRowAtIndexPath 中的详细信息项显示为 null

Posted

技术标签:

【中文标题】didSelectRowAtIndexPath 中的详细信息项显示为 null【英文标题】:detail item from didSelectRowAtIndexPath comes out as null 【发布时间】:2011-05-26 16:39:27 【问题描述】:

现在我有一张表格,上面列出了许多 PDF。用户可以从表格中选择一个 PDF,它将显示在视图中。现在,当我从表中选择和项目时,它应该将 detailView 的 detailItem 更改为我选择的行中的项目,此外将变量 i 更改为选定的行号。

这是我的DidSelectRowAtIndexPath 方法的样子:

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

    affirmaPDFViewController.detailItem = [NSString stringWithFormat:@"%@", [listOfPDF objectAtIndex:indexPath.row]];
    affirmaPDFViewController.i = indexPath.row;

    NSLog(@"%d", indexPath.row); //returns the proper value
    NSLog(@"%@", [listOfPDF objectAtIndex:indexPath.row]); //returns the proper value

    //NSLog(@"%d", affirmaPDFViewController.i); //DOES NOT return the proper value
    //NSLog(@"%@", affirmaPDFViewController.detailItem); //DOES NOT return the proper value


对于前两个 NSLog,它们显示正确的信息,但是当我检查最后两个时,它们会显示 affirmaPDFViewController.i = 0 和 affirmaPDFViewController.detailItem = null。当我需要affirmaPDFViewController.i= indexPath.row 和affirmaPDFViewController.detailItem = 我选择的行中的项目时。

有人知道为什么他们没有给出正确的值吗?

提前致谢!

【问题讨论】:

【参考方案1】:

您的affirmaPDFViewController 实例为零。检查创建它的方法,记住你可以在调试器中设置一个断点来查看它是否是一个有效的对象。

【讨论】:

Charbonnaeau:我会用什么方法来创建控制器,我会怎么做?我在课程开始时综合它。这就是您创建它的实例的意思吗? @synthesize 关键字创建了一对 getter 和 setter 方法,允许您访问类中的实例变量。要将对象实际分配给该实例变量,您必须使用适当的 alloc / init 调用创建一个对象。 所以affirmaPDFViewController 代表我的视图,PDFTableController 代表我的弹出表,我会在PDFTableController.m 文件的viewDidLoad 方法中创建affirmaPDFViewController 的新实例吗? 视图控制器是相当重的对象,通常你只会在需要时创建一个(就在将它推到屏幕上之前)。

以上是关于didSelectRowAtIndexPath 中的详细信息项显示为 null的主要内容,如果未能解决你的问题,请参考以下文章

我可以麻烦UITableViewDelegate的didSelectRowAtIndexPath:吗?

在 didSelectRowAtIndexPath 之后 prepareForSegue?

didSelectRowAtIndexPath 没有被调用?

didSelectRowAtIndexPath 不会在 ViewController 中触发

在 didSelectRowAtIndexPath 中记录特定行

为啥要在 didSelectRowAtIndexPath 中重新定义 pListPath?