我知道这应该很容易解决,但是我看不到出了什么问题。可能额外的一对会有所帮助。这是我想做的。
为此,我通过委托实现了协议。
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”。我不确定为什么它不起作用。这是很基本的东西,但给我带来了困难。
谢谢
最佳答案
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;
有你的问题。您正在创建一个新的MyFormViewController。但这是错误的MyFormViewController;您想使用已经是segue的目标控制器的控制器。因此,您要设置错误的对象的委托。
(PS请注意,我使用大写字母作为 class 名称的开头?请始终这样做。)