我正在使用以下代码在我的代码中创建对 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
但我得到以下错误
我不确定为什么。我正在尝试传递在 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/