2

これは簡単に修正できるはずですが、何が問題なのかわかりません。追加のペアが役立つ場合があります。これが私がやろうとしていることです。

  1. 私のテーブル ビュー コントローラーでは、ナビゲーション コントローラーに新しいアイテムを追加するための (+) ボタンがあります。
  2. 次のView Controllerに移動するモーダルセグエがあります。ユーザーがフォームに入力してヒットを保存すると、テーブル ビュー コントローラーが新しく追加されたレコードでリロードされます。

これを行うために、デリゲートを使用してプロトコルを実装しました。

MyFormViewController.h

protocol MyCustomDelegate <NSObject>

@required

- (void)addNewRecord:(myFormViewController *)formViewController itemToAdd:(Item *)item;

@end

@property (nonatomic,weak) id<MyCustomDelegate> delegate;

MyFormViewController.m

@synthesize delegate;

- (IBAction)addItem:(id)sender {
    Item *item = [[Item alloc]init];

    item.name = itemName.text;
    item.desc = itemDescription.text;

    // I am having problem here, self.delegate is being null even though, it's being set in    prepareForSegue.
    if ([self.delegate respondsToSelector:@selector(addNewRecord:)]) {

        [self.delegate addNewRecord:self itemToAdd:item];
    }
    else{

        // delegate is getting set to null for some reason.
        NSLog(@"Delegate method not getting called...%@",delegate);
    }
}

MyTableViewController.h

@interface MyTableViewController : UITableViewController

MyTableViewController.m

-(void)addItem:(myFormViewController *)formViewController itemToAdd:(Item *)item{

    if(item)
    {
        MyClass *_itemClass = [[MyClass alloc]initWithPath:@"items/"];

        [_itemClass addItemForUser:item];
    }

    [formViewController dismissViewControllerAnimated:YES completion:nil];
}

私のprepareForSegue メソッドでは、テーブルビューコントローラーをデリゲートとして設定しています。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

   if ([segue.identifier isEqualToString:@"addItemSegue"]){

    myFormViewController *_showaddTopic = [[myFormViewController alloc]init];

    _showaddTopic.delegate = self;
}

このすべての後、myFormViewController のデリゲートは「null」に設定されています。なぜ機能しないのかわかりません。それはかなり基本的なことですが、苦労しています。

ありがとうございました

4

2 に答える 2

4
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;

問題があります。新しいMyFormViewControllerを作成しています。しかし、それは間違った MyFormViewController です。すでにセグエの宛先コントローラーになっているものを使用したい。したがって、間違ったオブジェクトのデリゲートを設定しています。

(追記: クラス名の先頭に大文字を使用していることに注意してください。常に大文字を使用してください。)

于 2013-04-22T01:44:44.183 に答える
0

おそらく _showaddTopic.delegate = self; ここに書き込むことはできず、すぐにこのオブジェクトを割り当てないようにする

于 2013-09-24T03:26:41.287 に答える