SplitView控制器中的委派问题

时间:2014-02-21 21:16:08

标签: ios delegation

我在SplitViewController中的Master和Detail视图之间实现了一个简单的委托(横向方向,因此两个视图都可见)。当我按下按钮时,详细信息中的表视图应该更新。

这是宣言中的 MasterViewController.h

@protocol DetailVCDelegate <NSObject>
- (void)requestTableUpdate;
@end
@interface MasterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
- (IBAction)updateTable:(id)sender;
@property (nonatomic, weak) id <DetailVCDelegate> delegate;
在MVC.m中的

我为IBaction updateTable执行以下操作:

[self.delegate requestTableUpdate];

然后在Detail.h中

#import "MasterViewController.h"
@interface DetailViewController : UITableViewController <DetailVCDelegate>

在Detail.m

- (void)requestTableUpdate
{
    NSLog(@"called");
    [self.tableView reloadData];
}

永远不会调用日志,也不会调用tableView的更新。 我将不胜感激任何有关如何解决此问题的建议,我想我错过了一些特定于SplitViews的委托规则

1 个答案:

答案 0 :(得分:2)

当你发送消息并且没有任何反应时,你的第一个想法应该是:嗯,也许我正在向nil发送消息。

所以,你说:

[self.delegate requestTableUpdate];

但没有任何反应。所以你应该立即检查self.delegate是否为零。

您已声明委托属性

@property (nonatomic, weak) id <DetailVCDelegate> delegate;

但是一个属性没有,直到你给它一个。您可以 将MasterViewController实例的delegate属性设置为其他实例(显然采用了DetailVCDelegate协议的实例)。代表们不是天生的:他们是故意制造的。