使用prepareForSegue时键值编码出错

时间:2013-06-19 23:45:10

标签: ios key-value-coding

我正在使用以下内容在我的代码中创建对视图控制器的引用,如下所示:

-(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中选择的单元格的索引中传递位置。如果有更好的方法,请告诉我。为什么我会收到此错误?

THX

2 个答案:

答案 0 :(得分:1)

setValue:forKeyPath:需要一个对象(即id)作为第一个参数。

您正在传递NSInteger

您必须使用对象类型,这意味着将itemIndex变为NSNumber

然后你可以使用

存储它
[vc setValue:@(indexPath.row) forKeyPath:@"itemIndex"];

并通过

检索
NSInteger myIndex = [vc valueForKey:@"itemIndex"].integerValue;

答案 1 :(得分:1)

setValue:forKey:期望一个对象为其value参数,并且你传递一个原语(在本例中是一个整数)。您可以通过修改方法来解决此问题,如下所示:

-(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];