objectAtIndex 没有在 segue 中传递选定的行

Posted

技术标签:

【中文标题】objectAtIndex 没有在 segue 中传递选定的行【英文标题】:objectAtIndex not passing selected row in segue 【发布时间】:2014-07-07 04:41:26 【问题描述】:

我希望通过 segue 将选定行的数据传递给第二个视图控制器。填充第一个 viewcontroller tableview 的结果是一个数组。在我使用的 segue 中:

if ([[segue identifier] isEqualToString:@"detailSegue"]) 
    //
    DetailVC *dvc = (DetailVC *)[segue destinationViewController];

    NSIndexPath *indexPath = [self.resultsVC indexPathForSelectedRow];
    Car *selectedCar = (Car *) [self.results objectAtIndex:indexPath.row];
    dvc.currentCar = selectedCar;

当我执行 segue 时出现错误:

[NSKnownKeysDictionary1 carName]: unrecognized selector sent to instance

根据我对该主题所做的研究,我确实包含了类似于以下内容的内容:

[fetchRequest setResultType:NSDictionaryResultType]

删除后对其他人有所帮助。我需要为我的代码保留它。 如何将所选行的数据传递给第二个视图控制器?

7 月 8 日更新

我用来构造数组的代码来自 fetchrequest。数组行当前显示一个整数和 carName。

NSArray* results = [context executeFetchRequest:r error:&error];
NSSortDescriptor* sd = [NSSortDescriptor sortDescriptorWithKey:@"number" ascending:NO];

results = [results sortedArrayUsingDescriptors:@[sd]];
self.results = results;

问题是我将 segue 指向搜索 Car* 而不是这个数组输出吗?

7 月 12 日更新

根据 Aubada Taljo 的建议,我删除了对 Car* 的引用,并将以下内容添加到 segue:

dvc.selectedCar = [self.results objectAtIndex:indexPath.row];

并在我的 detailVC 中声明了 NSDictionary。

【问题讨论】:

【参考方案1】:

如果您确定问题出在此处,那么您确定 self.results 包含 Car* 类型的对象吗?

我建议您在变量观察器中检查它是否包含 Car* 类型的对象,因为您似乎正在从另一个类型的对象请求属性 carName。

【讨论】:

感谢您的提示。我第一次绊倒了变量观察者,在结果数组中,我得到了一个带有 (Class)NSKnownKeysDictionary1 的数字列表。它是否正确?我已经用关于如何构建数组的代码更新了问题。 您的数组包含 Dictionary 对象,而您的代码正在尝试将它们解析为 Car 对象,在您添加的新代码中,您应该像这样将此 Dictionaries 数组转换为 Cars 数组,例如Car* car = [[Car alloc] init]; car.carName = dictionary[@"carName"] 当然你应该把这段代码放在一个for循环中来解析所有的字典并构建新的数组。 当我在 selectedCar 上选择打印描述时,我得到 - selectedCar 的打印描述: car​​Name = "Mustang"; objectID = "0xd00ac0002 ";排名 = 2; 转换字典是否会影响这些其他属性以及数组如何填充表格视图?我只对将 carName 传递给下一个视图控制器感兴趣。可以按照您在 segue 中的建议进行转换吗? 这可能意味着您在字典中有一个键“carName”,但并不意味着您可以直接访问它,只需尝试 selectedCar[@"carName"];

以上是关于objectAtIndex 没有在 segue 中传递选定的行的主要内容,如果未能解决你的问题,请参考以下文章

在 ViewDidLoad 中使用 objectAtIndex:indexPath.row [关闭]

NSArray objectAtIndex 索引 1 超出 [0,0] 的范围?

如何使 objectAtIndex:0 始终可见?

访问 NSMutableArray 中的 objectatIndex

使用 objectAtIndex:indexPath.row 选择来更改滚动视图图像

在 XML 中找到但在代码中没有找到的 Segue