ios - 在 View Controller 之间传递socketIO连接

标签 ios xcode xcode5

我知道这个问题已经被问过很多次了。

我使用 Xcode 的 Socket.IO 客户端 ( https://github.com/pkyeck/socket.IO-objc )。问题是我需要在许多 View Controller 中进行 socketIO 连接。

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

#import "SocketIO.h"

@inteface ViewControllerA : UIViewController <SocketIODelegate> {
     SocketIO *socketIO;
}

(.m 文件):

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


ViewControllerB 是为聊天室设计的,我需要获取这个 socketIO 对象来与服务器通信。我需要做这些事情吗?

1) 在 ViewControllerB 中与 ViewControllerA 中的内容相同

#import "SocketIO.h"

@inteface ViewControllerA : UIViewController <SocketIODelegate> {
     SocketIO *socketIO;
}

2)在 ViewControllerA 中,在序列之前执行以下操作:

#import "viewControllerB.h"

...

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

或者也许有一些简单的方法可以从许多 View Controller 访问数据?

最佳答案

尽管有些人不喜欢单例,但我发现它们在这些类型的情况下非常有用,在这种情况下,没有明显的数据“所有者”。 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;

祝你好运!

关于ios - 在 View Controller 之间传递socketIO连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20274307/

相关文章:

ios - Facebook iOS SDK增加应用程序大小

ios - iOS后台调优后单例实例的生命周期

android - Mp4 视频旋转元数据

ios - 使用@property 和@synthesize 时获取不正确的值

iphone - UITableView 单元格采用 UITableView 背景图像的图案颜色

ios - 创建和调用类初始化程序并传入文字值 Swift 时调用中的额外参数

objective-c - xCode 5/iOS 7 中的 UILabel 对齐行为是否发生了变化?

iphone - 使用带有两个参数的 UIButton addTarget 时无法识别的选择器

xcode - 使用 Interface Builder 完成的 Cocoa GUI 在我的机器上布局正确,在另一台机器上布局错误

ios - 在 Core data iOS 中设置自动增量