0

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

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

但我收到以下错误

在此处输入图像描述

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

谢谢

4

2 回答 2

1

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

您正在传递一个NSInteger.

您将不得不使用对象类型,这意味着将您的itemIndex变成NSNumber.

然后你可以使用它来存储它

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

并通过

NSInteger myIndex = [vc valueForKey:@"itemIndex"].integerValue;
于 2013-06-19T23:53:46.407 回答
1

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];
于 2013-06-19T23:53:53.670 回答