iOS代理未调用

时间:2014-04-14 09:52:12

标签: ios delegates

对于一个项目,我需要能够从" secondTableViewController" to" firstTableViewController"。我跟随了一些关于代表的教程,但我似乎无法让它发挥作用。当我想从secondTableViewController调用firstTableViewController中的方法时,我会检查是否"委托"属性是空的,每次都是..

这是我的代码:

SecondTableViewController.h

@protocol SendStatusDelegate <NSObject>
@required
-(void)didStatusChanged;

@end // eof delegate protocol

@interface SecondTableViewController : UITableViewController

@property (nonatomic, assign) id<SendStatusDelegate> delegate;

@end

SecondTableViewController.m

// Status is changed on row click
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.delegate) { // This is never called because delegate looks to remain empty
        [self.delegate didStatusChanged];
    }
}

FirstTableViewController.h

@interface FirstTableViewController : UITableViewController <SendStatusDelegate>

@end

FirstTableViewController.m

这里唯一要做的就是实现 - (void)didStatusChanged方法。

3 个答案:

答案 0 :(得分:1)

首先,当您初始化delegate时,您需要在FirstTableViewController中将SecondTableViewController设置为自我。在didSelectRowAtIndexPath:上说你在这种情况下调用SecondTableViewController

FirstTableViewController.m

// Status is changed on row click
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    SecondTableViewController *secondTableVC = [SecondTableViewController alloc] init];
    secondTableVC.delegate = self;

}

答案 1 :(得分:0)

在您创建FirstTableViewController实例的SecondTableViewController中,您应该将创建的实例的委托分配给FirstTableViewController

secondTableViewControllerInstance.delegate = self;
FirstTableViewController

中的

答案 2 :(得分:0)

您的FirstTableViewController班级应符合SendStatusDelegate

@interface FirstTableViewController : UITableViewController <SendStatusDelegate>

然后分配delegate SecondViewController self实例SecondTableViewControllerInstance.delegate = self;

{{1}}