ios - 使用 prepareForSegue 时键值编码错误

标签 ios key-value-coding

我正在使用以下代码在我的代码中创建对 View Controller 的引用,如下所示:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if([segue.identifier isEqualToString:@"detailSegue"]){
    NSIndexPath *indexPath=[self.tableView indexPathForSelectedRow];
    TRDetailViewController *vc=segue.destinationViewController;
    vc.item=self.items[indexPath.row];
    [vc setValue:self forKeyPath:@"delegate"];
    [vc setValue:indexPath.row forKeyPath:@"itemIndex"];
  }
}

这是在 TRDetailViewController 中声明的

@interface TRDetailViewController : UIViewController
  @property (weak, nonatomic) IBOutlet UILabel *detailLabel;
  @property NSString *item;
  @property (nonatomic, weak)id delegate;
  @property NSInteger itemIndex;
  - (IBAction)deleteItem:(id)sender;
@end

但我得到以下错误

enter image description here

我不确定为什么。我正在尝试传递在 UITableView 中选择的单元格的索引中的位置。如果有更好的方法,请告诉我。为什么会出现此错误?

谢谢

最佳答案

setValue:forKey: 期望一个对象作为它的值参数,而你传递给它的是一个原始值(在本例中是一个整数)。您可以通过将方法修改为如下内容来解决此问题:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if([segue.identifier isEqualToString:@"detailSegue"]){
    NSIndexPath *indexPath=[self.tableView indexPathForSelectedRow];
    TRDetailViewController *vc=segue.destinationViewController;
    vc.item=self.items[indexPath.row];
    [vc setValue:self forKeyPath:@"delegate"];
    [vc setValue:[NSNumber numberWithInt:indexPath.row] forKeyPath:@"itemIndex"];
  }
}

然后像这样访问它:

[[vc valueForKey:@"itemIndex"] intValue];

关于ios - 使用 prepareForSegue 时键值编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203147/

相关文章:

iphone - CATransaction 未观察到 CALayer 子类上的属性

objective-c - 如何将 NSValue 转换为 NSData 并返回?

ios - UIScrollView/UITableView 设置 ContentOffset 会杀死惯性/滚动吗?

ios - 自定义 TableViewCell 内容在 ios9 xcode7 上不可见

cocoa - 观察 Cocoa 中的键值对多关系

objective-c - 使用 valueForKeyPath 获取数组元素

iOS 如何使用谓词或 KVC 将对象的多个属性转储到字典中?

ios - 使用 AWS 的 Swift 显示 UIImageView

ios - 防止 TableView 在 insertRows 后滚动到顶部

ios - Swift 膨胀 [UInt8] 无法使用 miniz lib 缩小