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 的打印描述: carName = "Mustang"; objectID = "0xd00ac0002以上是关于objectAtIndex 没有在 segue 中传递选定的行的主要内容,如果未能解决你的问题,请参考以下文章
在 ViewDidLoad 中使用 objectAtIndex:indexPath.row [关闭]
NSArray objectAtIndex 索引 1 超出 [0,0] 的范围?
访问 NSMutableArray 中的 objectatIndex