2013-04-22 90 views
2

我知道這應該是一個簡單的事情來解決,但我不明白髮生了什麼問題。可能是額外的對將有所幫助。這是我想要做的。自定義委託爲空iOS

  1. 在我的表格視圖控制器中,導航控制器上有一個(+)按鈕用於添加新項目。
  2. 我有一個模式segue,把它帶到下一個視圖控制器。用戶填寫表格並點擊保存表格視圖控制器重新加載新添加的記錄。

爲此,我使用委託實現了協議。

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方法,我設置我的tableviewcontroller爲代表。

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

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

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

    _showaddTopic.delegate = self; 
} 

畢竟,我在myFormViewController中的委託被設置爲「null」。我不知道爲什麼它不起作用。這是非常基本的東西,但給我很難。

謝謝

回答

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

有你的問題。你是創建 a MyFormViewController。但這是錯誤的MyFormViewController;你想使用的是已經是的segue的目標控制器。所以你設置了錯誤的對象的委託。

(PS注意我用一個大寫字母開始一類的名字總是這樣?)

+0

謝謝你的迴應。它的工作,它解決了問題,並給了我另一個。我的[self.delegate respondsToSelector:@selector(addNewRecord :)]一直返回NO。你明白爲什麼? – Harish 2013-04-22 01:53:42

+0

是的,我喜歡。詢問一個單獨的問題,並給我它的鏈接。 – matt 2013-04-22 02:51:55

0

也許_showaddTopic.delegate =自我;不能寫在這裏並立即將此對象分配爲