0

次のように、コードで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 で選択されたセルのインデックスで場所を渡そうとしています。良い方法があれば、教えてください。このエラーが発生するのはなぜですか?

どうも

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: は 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];
于 2013-06-19T23:53:53.670 に答える