我知道这应该很容易解决,但我看不出哪里出了问题。可能是额外的一对会有所帮助。这就是我想要做的。
- 在我的表格 View Controller 中,导航 Controller 上有一个 (+) 按钮用于添加新项目。
- 我有一个模态序列,可以将它带到下一个 View Controller 。用户填写表格并点击保存表格 View Controller 重新加载新添加的记录。
为此,我使用委托(delegate)实现了协议(protocol)。
MyFormViewController.h
protocol MyCustomDelegate <NSObject>
@required
- (void)addNewRecordmyFormViewController *)formViewController itemToAddItem *)item;
@end
@property (nonatomic,weak) id<MyCustomDelegate> delegate;
MyFormViewController.m
@synthesize delegate;
- (IBAction)addItemid)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 respondsToSelectorselector(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)addItemmyFormViewController *)formViewController itemToAddItem *)item{
if(item)
{
MyClass *_itemClass = [[MyClass alloc]initWithPath"items/"];
[_itemClass addItemForUser:item];
}
[formViewController dismissViewControllerAnimated:YES completion:nil];
}
在我的 prepareForSegue 方法中,我将 tableviewcontroller 设置为委托(delegate)。
-(void)prepareForSegueUIStoryboardSegue *)segue senderid)sender{
if ([segue.identifier isEqualToString"addItemSegue"]){
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;
}
毕竟,我在 myFormViewController 中的委托(delegate)被设置为“null”。我不确定为什么它不起作用。这是非常基本的东西,但让我很难过。
谢谢
Best Answer-推荐答案 strong>
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;
你的问题。您正在创建一个新 MyFormViewController。但那是错误的 MyFormViewController;您想使用 已经 segue 的目标 Controller 的那个。所以你设置了错误的对象的委托(delegate)。
(请注意我使用大写字母开头的类名?总是这样做。)
关于iphone - 自定义委托(delegate)为空 iOS,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/16138215/
|