在视图控制器之间传递socketIO连接

 船长2502860123 发布于 2023-02-13 21:51

我知道这个问题已经被多次提出过了.

我为Xcode使用Socket.IO客户端(https://github.com/pkyeck/socket.IO-objc).问题是我需要在许多视图控制器中连接socketIO.

在ViewControllerA(.h文件)中我有这个:

#import "SocketIO.h"

@inteface ViewControllerA : UIViewController  {
     SocketIO *socketIO;
}

(.m文件):

- (void) viewDidLoad {
     ...
     [socketIO connectToHot:@"localhost" onPort:1234];
}


而ViewControllerB是为聊天室而制作的,我需要将此socketIO对象用于与服务器进行通信.我是对的,我需要做这件事吗?

1)在ViewControllerB中,使其与ViewControllerA中的相同

#import "SocketIO.h"

@inteface ViewControllerA : UIViewController  {
     SocketIO *socketIO;
}

2)在seque之前的ViewControllerA中进行以下操作:

#import "viewControllerB.h"

...

viewControllerB *viewControllerB = (viewControllerB *)[storyboard instantiateViewControllerWithIdentifier:@"viewControllerB"];
viewControllerB.socketIO = socketIO;
[self pushViewController:viewControllerB animated:YES];

或者也许有一些简单的方法可以从许多视图控制器访问数据?

1 个回答
  • 即使有些人不喜欢Singletons,我发现它们在这些类型的情况下非常有用,在这种情况下,没有明显的"所有者"的数据.Singleton是一个只存在于一个实例中的对象.它可以通过singleton类本身的静态方法访问:

    SocketKeeperSingleton.h

    @interface SocketKeeperSingleton : NSObject
    
    @property (nonatomic, strong) SocketIO *socketIO;
    + (SocketKeeperSingleton *) sharedInstance;
    
    @end 
    

    SocketKeeperSingleton.m

    #import "SocketKeeperSingleton.h"
    
    @implementation SocketKeeperSingleton 
    
    // The synthesize will automatically generate a getter and setter
    @synthesize socketIO = _socketIO;
    
    + (SocketKeeperSingleton *)sharedInstance {
        static SocketKeeperSingleton *sharedInstance = nil;
        static dispatch_once_t onceToken;
    
        dispatch_once(&onceToken, ^{
            sharedInstance = [[self alloc] init];
        });
        return sharedInstance;
    }
    
    - (id)init {
        if (self = [super init]) {
            NSLog(@"In SocketKeeperSingleton init");
        }
        return self;
    }
    
    // Override the getter for your socket
    - (SocketIO *)socketIO {
        if (!_socketIO || check-to-see-if-your-socket-has-been-disconnected-or-failed) {
            _socketIO = code-to-create-and-connect-your-socket-goes-here
        }
        return _socketIO;
    }
    
    @end
    

    然后,从项目的任何位置获取套接字,如下所示:

    SocketIO *mySocketIO = [SocketKeeperSingleton sharedInstance].socketIO;
    

    祝好运!

    2023-02-13 21:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有