2017-02-07 4 views
2

Я имею одноплодный использовать соединение WebSocket, когда _srWebSocket = ноль, будет возвращена новый _srWebSocket, но при подключении _srWebSocket, будет возвращено нольцелью с одноплодным возвращением нолем

@interface SocketManager : NSObject 

@property (nonatomic, weak) SRWebSocket *srWebSocket; 

+ (SocketManager *) sharedInstance; 

@end 

@implementation SocketManager 

@synthesize srWebSocket = _srWebSocket; 

+ (SocketManager *) sharedInstance { 
    static SocketManager *sharedInstance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedInstance = [[SocketManager alloc] init]; 
    }); 
    return sharedInstance; 
} 
- (id)init { 
    if (self = [super init]) { 
     NSLog(@"In SocketKeeperSingleton init"); 
    } 
    return self; 
} 
- (SRWebSocket *) srWebSocket { 
    if (!_srWebSocket || _srWebSocket.readyState == SR_CLOSED) { 
     _srWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:@"wss://...:8000"]]; 
     [_srWebSocket open]; 
    } 
    return _srWebSocket; 
} 

@end 
Call singleton 
srWebSocket = [SocketManager sharedInstance].srWebSocket; 
+0

Я думаю, что нужно написать еще часть "если (_srWebSocket || _srWebSocket.readyState == SR_CLOSED!) { _srWebSocket = [[SRWebSocket Alloc] initWithURL: [NSURL URLWithString: @" WSS: // ... : 8000 "]]; [_srWebSocket open]; }", потому что, когда оба условия ошибочны. –

+0

Мне нужно использовать открытое соединение – Qwerty

+0

Hey @Qwerty bro, где вы вызываете этот метод 'srWebSocket' –

ответ

1

У вас не хватает srWebSocket вызова метода,

Первый способ,

Объявить один метод в singleton.h файле

-(void) doInitialSetupOnLaunch; 

Добавить этот метод где-то в вашем файле singleton.m,

-(void) doInitialSetupOnLaunch { 
    //Put your initialized code i mean you can call your method from here & define your properties here. 

_srWebSocket = [self srWebSocket]; 
} 

- (SRWebSocket *) srWebSocket { 
    if (!_srWebSocket || _srWebSocket.readyState == SR_CLOSED) { 
     _srWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:@"wss://...:8000"]]; 
     [_srWebSocket open]; 
    } 
    return _srWebSocket; 
} 

Назовите это где-то, лучший способ, которым Вы можете позвонить из appDelegate.m

Теперь вы готовы к нему доступ по недвижимости,

Call singleton 
srWebSocket = [SocketManager sharedInstance].srWebSocket; 

Или Второй способ

SRWebSocket * srWebSocket = [[SocketManager sharedInstance] srWebSocket]; 
+0

- (void) doInitialSetupOnLaunch { _srWebSocket = [[SRWebSocket alloc] initWithURL: [NSURL URLWithString: @ "wss: //message.api.sendway.com: 8000"]]; } вот так, извините, я разработчик Android с объективом c Я работаю в первый раз – Qwerty

+0

Его хорошо брей :) Как только вы получите 15+ репутацию, принимайте мой ответ. –

+0

Мне нужно использовать открытое соединение – Qwerty

1

потому что вы пишете 'static SocketManager * sharedInstance = nil;' в методе shareInstance. , когда этот метод вызывается каждый раз, когда посылает нуль.

+ (SocketManager *) sharedInstance { 
static SocketManager *sharedInstance = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    sharedInstance = [[SocketManager alloc] init]; 
}); 
return sharedInstance; 

}

записи по этой линии за пределами shareInstance метод "статический SocketManager * sharedInstance = ноль;"

+0

не помог удалить линию – Qwerty

 Смежные вопросы

  • Нет связанных вопросов^_^