我在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的委托规则
答案 0 :(得分:2)
当你发送消息并且没有任何反应时,你的第一个想法应该是:嗯,也许我正在向nil发送消息。
所以,你说:
[self.delegate requestTableUpdate];
但没有任何反应。所以你应该立即检查self.delegate
是否为零。
您已声明委托属性:
@property (nonatomic, weak) id <DetailVCDelegate> delegate;
但是一个属性没有值,直到你给它一个。您可以 将MasterViewController实例的delegate
属性设置为其他实例(显然采用了DetailVCDelegate协议的实例)。代表们不是天生的:他们是故意制造的。