我正在使用以下内容在我的代码中创建对视图控制器的引用,如下所示:
-(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中选择的单元格的索引中传递位置。如果有更好的方法,请告诉我。为什么我会收到此错误?
THX
答案 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];