我知道這應該是一個簡單的事情來解決,但我不明白髮生了什麼問題。可能是額外的對將有所幫助。這是我想要做的。自定義委託爲空iOS
- 在我的表格視圖控制器中,導航控制器上有一個(+)按鈕用於添加新項目。
- 我有一個模式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」。我不知道爲什麼它不起作用。這是非常基本的東西,但給我很難。
謝謝
謝謝你的迴應。它的工作,它解決了問題,並給了我另一個。我的[self.delegate respondsToSelector:@selector(addNewRecord :)]一直返回NO。你明白爲什麼? – Harish 2013-04-22 01:53:42
是的,我喜歡。詢問一個單獨的問題,並給我它的鏈接。 – matt 2013-04-22 02:51:55