4

私はiOSの世界に不慣れで、値をTableViewからホームコントローラーに戻そうとしているときに問題に遭遇しました。

私が取り組んでいるシナリオは

  1. ホームコントローラーにはボタンがあります
  2. ボタンをクリックすると、2 番目の UIViewController の項目のリストが開きます
  3. ユーザーがリストからアイテムを選択する
  4. 選択した項目がホーム コントローラーの別のリストに追加されます

この問題についての指針を本当に感謝します:

これが私がホームでセグエを準備している方法です

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *destination = segue.destinationViewController;
    if ([destination respondsToSelector:@selector(setDelegate:)]) { 
        [destination setValue:self forKey:@"delegate"];
    }

}

SecondController にはデリゲート ID があるため、デリゲートがrespondsToSelector" setDelegate" に対して true を返すように設定されていると想定しています。

次に、SecondController で、ユーザーが項目を選択すると、didSelectRowAtIndexPath&viewWillDisappearメソッドを呼び出して項目を設定し、ビューを非表示にします。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    POSAllItemsCell *cell = (POSAllItemsCell *) [tableView cellForRowAtIndexPath:indexPath];

    item = [NSDictionary dictionaryWithObjectsAndKeys:cell.name, @"Name", cell.price, @"Price", cell.code, @"Code", nil];

    [self dismissViewControllerAnimated:YES completion:NULL];

}

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    if ([delegate respondsToSelector:@selector(setSelection:)]) {
        [delegate setValue:item forKey:@"selection"];
    }
}

ここでの問題は、HomeController に setSelection メソッドがあるにもかかわらず、 respondsToSelectorforが false を返すことです。setSelection

- (void) setSelection:(NSDictionary *)dict {
    if (![dict isEqual:selection]) {
        ......
    }
}

私の質問が明確でないか、適切にフォーマットされていない場合は、事前にお詫び申し上げます。ところで、これは Xcode 4.2 を搭載した iOS 5 用です。

4

2 に答える 2