我知道如何使用委托模式
id<> delegate
property [delegate respondtoselector:@selector(method)]
class <someProtocol>
-(void) protolcolMethod
class1Obj.delegate = self;
我在我的应用程序中使用了这几个地方,但现在我在同一个应用程序中再次执行此操作responsetoselector无效。唯一的区别是这次它在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];
}
答案 0 :(得分:0)
也许这是一个长镜头;但我怀疑实际上“在屏幕上”的rosterForGroup是而不是你在viewDidLoad方法中alloc/init
的同一个实例。也许你是通过segues或其他方法到达那里的;但是您显示的代码并未指出(尽管可能在您省略的代码中)您实际上将xR4G视图控制器设置为包含 View Controller并将其放在屏幕上(连接后)这是行动方法等。
这意味着该解决方案是对View Controller关系的轻微重构,如果您不清楚如何实现这一点,则可能需要额外的SO问题(这个问题,因为它代表了,不是正确的建议如何得到你想要的东西。
我还怀疑您的rosterForGroup
View Controller未正确初始化。简单地在VC上执行alloc / init将无法正确设置它的视图和它们的IB * Connections(除非它的loadView
方法以编程方式完成所有操作)。它们应该从故事板或XIB文件中加载(initWithNibName:
或[self.storyboard instantiateViewControllerWithIdentifier:]