我知道这个问题已经被问过很多次了。
我使用 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/