我想从ViewController 2访问ViewController 1中的一个函数。此方法有效(由断点和NSLog输出确认)。但是从ViewController 2调用时,访问在ViewController 1中定义的对象为nil。
ViewController 1.h
#import "SRWebSocket.h"
@interface ViewController : UIViewController <UITextFieldDelegate, SRWebSocketDelegate>
@property (nonatomic,strong) SRWebSocket *socket;
-(void)sendMessageToServerWithContent:(NSString *)message;
ViewController 1.m
- (IBAction)connect:(id)sender {
socket.delegate = nil;
socket = nil;
socket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:serverIP_GLOBAL]]];
socket.delegate = self;
}
-(void)sendMessageToServerWithContent:(NSString *)message{
//irrelevant code for question removed
[self.socket send:jsonString];
}
ViewController 2.h
#import "ViewController.h"
@property (nonatomic,strong) ViewController *viewVC;
@interface ContactsTableViewController : UITableViewController
ViewController 2.m
- (void)viewDidLoad {
[super viewDidLoad];
viewVC = [ViewController alloc];
[viewVC sendMessageToServerWithContent:@"Test"];
//When calling from here, the socket object in ViewController 1 is nil
}
您不能像这样初始化对象: viewVC = [ViewController alloc];
您必须将ViewContoller1的对象传递给ViewContoller2,即
在viewcontoller1上推动ViewContoller2时,您已编写了情节提要删除代码
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
ViewController2 *view2=[segue destinationViewController];
view2.viewVC=self; // pass viewcontoller1 object to viewcontoller2
}
在ViewContoller2中,您将在viewVC变量中访问viewContoller1对象,您可以像这样直接调用它
- (void)viewDidLoad {
[super viewDidLoad];
[viewVC sendMessageToServerWithContent:@"Test"];
//When calling from here, the socket object in ViewController 1 is nil
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句