gpt4 book ai didi

ios - 如何访问其他类中的对象?

转载 作者:行者123 更新时间:2023-12-01 17:30:13 26 4
gpt4 key购买 nike

我想从 ViewController 2 访问 ViewController 1 中的一个函数。这有效(通过断点和 NSLog 输出确认)。但是访问 ViewController 1 中定义的对象是 从 ViewController 2 调用时。

View Controller 1.h

#import "SRWebSocket.h"

@interface ViewController : UIViewController <UITextFieldDelegate, SRWebSocketDelegate>
@property (nonatomic,strong) SRWebSocket *socket;

-(void)sendMessageToServerWithContent:(NSString *)message;

View Controller 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];

}

View Controller 2.h
#import "ViewController.h"

@property (nonatomic,strong) ViewController *viewVC;
@interface ContactsTableViewController : UITableViewController

View Controller 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 时,您已经编写了 Storyboard删除代码

 - (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

}

关于ios - 如何访问其他类中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com