我知道如何使用委托模式
- 声明协议
- 必需或可选方法
id<> delegate
财产[delegate respondtoselector:@selector(method)]
- 继承协议
class <someProtocol>
-(void) protolcolMethod
class1Obj.delegate = self;
我在我的应用程序中使用了这几个地方,但现在我在同一个应用程序中再次执行此操作,响应选择器不起作用。唯一的区别是这次它在 NavController 中。
NavController 父 tableview 类 didselectrow,推送另一个视图,该视图具有调用 presentmadelcontroller 的按钮,这是我声明我的协议并在 navigationContoller 父类中继承的地方。但为什么它不起作用?我为此挣扎了几个小时。
此类以模态方式呈现并声明此协议
#import <CoreData/CoreData.h>
@protocol xPro <NSObject>
-(void)xGet;
@end
id<xPro> xDel;
@interface rosterForGroup : UIViewController <NSFetchedResultsControllerDelegate>
{
NSFetchedResultsController *fetchedResultsController;
NSArray *dispName;
}
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) id<xPro> xDel;
- (IBAction)xFunc:(id)sender;
@end
.m file ...
- (IBAction)xFunc:(id)sender
{
[xDel xGet];
}
而这个类是 NavController 父类
...
@interface groupChatViewController : UIViewController<XMPPRoomDelegate, createNewGroupDelegate, UITableViewDataSource, UITableViewDelegate, xPro>
...
@property (strong, nonatomic) rosterForGroup *xR4G;
...
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
xR4G = [[rosterForGroup alloc]init];
xR4G.xDel = self;
...
-(void)xGet
{
NSLog(@"AAAAAAH");
}
请避免使用这些奇怪的对象名称。
rosterforgroup alloc/init
- (IBAction)openGroupOptions:(id)sender
{
roster4Group = [[rosterForGroup alloc]init];
[roster4Group setDelegate:self];
[self presentModalViewController:roster4Group animated:true];
//[xmppRoom fetchMembersList];
}