【问题标题】:storyboard NSIndexPath [closed]故事板 NSIndexPath [关闭]
【发布时间】:2012-10-21 18:27:56
【问题描述】:

我尝试使用带有表格视图的情节提要,该表格视图与应该向我显示图片的控制器视图相衔接。问题是当我按下任何“单元格”时,应用程序会崩溃。

这是问题代码:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if([[segue identifier] isEqualToString:@"ShowPhoto"])
    {
        DetailsViewController *dvc = [segue 
        destinationViewController];
        NSIndexPath *path = [[self tableView] indexPathsForSelectedRows];
        Photo *pic = [photosArray objectAtIndex:[path row]];

        [dvc setCureentPic: pic];
    }
}

问题是 NSIndexPath 的问题...我认为原因是我尝试将数组插入 NSIndex。 xcode 警告:使用“NSArray”类型的表达式初始化“NSIndexPath *__strong”的指针类型不兼容。

粉碎消息:无法识别的选择器发送到实例 [__NSArrayI 行]。 我该如何解决这个问题?

【问题讨论】:

    标签: ios storyboard tableview segue nsindexpath


    【解决方案1】:

    阅读文档 (here)您调用的方法,而不是对它们的作用做出假设...

    [[self tableView] indexPathsForSelectedRows]
    

    返回一个 NSArray不是 一个 NSIndexPath(顺便说一下,即使没有阅读文档,您也可以知道这一点 - 在 Cocoa 命名约定中,如果有的话是复数形式,然后它接受或返回NSArray),因此发送NSIndexPath 的消息会崩溃。写

    NSIndexPath *path = [[[self tableView] indexPathsForSelectedRows] objectAtIndex:0];
    

    相反,它会起作用(如果至少有一个选定的行 - 如果没有,您必须检查数组是否为空,否则它将再次崩溃......)

    顺便说一句,编译器甚至会警告你问题出在哪里......请在尝试编程之前尝试开发一些常识,因为如果没有,你会射杀自己和他人在脚下。

    【讨论】:

    • 谢谢,但现在当我检查文档时,我明白我写错了方法,正确的方法应该是: NSIndexPath *path = [[[self tableView] indexPathForSelectedRow];
    • @Dennis 但是你为什么不接受我的回答而接受了另一个?那个答案基本一样,只是没有任何解释……
    • 我接受了你的回答,我不知道为什么取消选中你的回答可能是因为我也接受了其他人的回答? (我是 stackoverflow 的新手)。
    • @Dennis 是的,一个问题一次只能有一个接受的答案,接受另一个答案会自动取消选中该答案(与投票不同,这可以随时更改)。
    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2023-02-11
    • 2012-01-22
    • 2016-11-25
    • 2013-04-30
    相关资源
    最近更新 更多