これは簡単に修正できるはずですが、何が問題なのかわかりません。追加のペアが役立つ場合があります。これが私がやろうとしていることです。
- 私のテーブル ビュー コントローラーでは、ナビゲーション コントローラーに新しいアイテムを追加するための (+) ボタンがあります。
- 次の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」に設定されています。なぜ機能しないのかわかりません。それはかなり基本的なことですが、苦労しています。
ありがとうございました