Iphone 自定义委托为空iOS
我知道这应该是一件简单的事情来解决,但我看不出哪里出了问题。也许多穿一双会有帮助。这就是我要做的Iphone 自定义委托为空iOS,iphone,ios,delegates,Iphone,Ios,Delegates,我知道这应该是一件简单的事情来解决,但我看不出哪里出了问题。也许多穿一双会有帮助。这就是我要做的 在“我的表格视图”控制器中,导航控制器上有一个(+)按钮用于添加新项目 我有一个模态序列,它将它带到下一个视图控制器。用户填写表单并点击保存表视图控制器重新加载新添加的记录 为此,我用一个委托实现了协议 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEq
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"addItemSegue"]){
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;
}
MyFormViewController.h
protocol MyCustomDelegate <NSObject>
@required
- (void)addNewRecord:(myFormViewController *)formViewController itemToAdd:(Item *)item;
@end
@property (nonatomic,weak) id<MyCustomDelegate> delegate;
在MyTableViewController.h中
protocol MyCustomDelegate <NSObject>
@required
- (void)addNewRecord:(myFormViewController *)formViewController itemToAdd:(Item *)item;
@end
@property (nonatomic,weak) id<MyCustomDelegate> delegate;
@接口MyTableViewController:UITableViewController
MyTableViewController.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);
}
}
-(void)addItem:(myFormViewController *)formViewController itemToAdd:(Item *)item{
if(item)
{
MyClass *_itemClass = [[MyClass alloc]initWithPath:@"items/"];
[_itemClass addItemForUser:item];
}
[formViewController dismissViewControllerAnimated:YES completion:nil];
}
在我的prepareforsgue方法中,我将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目标控制器的控制器。因此,您设置了错误对象的委托
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"addItemSegue"]){
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;
}
(请注意,我使用大写字母作为类名称的开头?始终如此。)
这是你的问题。您正在创建一个新的MyFormViewController。但这是错误的MyFormViewController;您希望使用已经是segue目标控制器的控制器。因此,您设置了错误对象的委托
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"addItemSegue"]){
myFormViewController *_showaddTopic = [[myFormViewController alloc]init];
_showaddTopic.delegate = self;
}
(请注意,我使用大写字母来开始一个类的名称?始终这样做。)也许_showaddTopic.delegate=self;无法在此处写入并立即将此对象分配给您可能\u showaddTopic.delegate=self;无法在此处写入,请立即将此对象分配给您谢谢您的回复。它成功了,解决了问题,又给了我一个。我的[self.delegate respondsToSelector:@selector(addNewRecord:)]始终返回NO。你明白为什么吗?是的,我明白。另外问一个问题,给我链接。谢谢你的回复。它成功了,解决了问题,又给了我一个。我的[self.delegate respondsToSelector:@selector(addNewRecord:)]始终返回NO。你明白为什么吗?是的,我明白。问一个单独的问题,并给我它的链接。