ストーリーボード付きの Xcode iOS 6。既存のプログラムにチャット機能を追加しています。GCDAsyncSocket を使用しています。1 つのビューコントローラー内にいると、すべてが完全に機能します。多くのビューコントローラーから開いているソケットにアクセスする必要があります。また、これらのビュー コントローラーから GCDASYNCSOCKET にアクセスする必要があります。
誰かが私を助けるかもしれないサンプルコードを持っていますか?
perpareforsegue を使用すると、開いているソケットを渡すことができますか? 私が見たシングルトンは、GCDASYNCSOCKET のような既存のクラスを考慮していないようで、機能していないようです。
いくつかの実例を教えてください。
Singleton.m
#import "SocketConnection.h"
#import "GCDAsyncSocket.h"
@implementation SocketConnection
static GCDAsyncSocket *socket;
+ (SocketConnection *)getInstance;
{
static dispatch_once_t once;
static SocketConnection *instanceOfSocketConnection;
dispatch_once(&once, ^ {instanceOfSocketConnection =[[SocketConnection alloc] init];});
return instanceOfSocketConnection;
}
- (id)init
{
NSString *host = @"xxx.xxxxx.com";
uint16_t port = 5467;
if (socket == nil)
{
socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
}
if (![socket isConnected])
{
NSError *error = nil;
if (![socket connectToHost:host onPort:port error:&error])
{
NSLog(@"Error connecting: %@", error);
}
}
return self;
}
-(void) socket:(GCDAsyncSocket *) socket didConnectToHost:(NSString *)host port:(uint16_t)port
{
NSLog(@"Connected");
}
@end
Singleton.h
#import <Foundation/Foundation.h>
#import "GCDAsyncSocket.h"
@interface SocketConnection : NSObject{}
+ (SocketConnection *)getInstance;
@end
このコード(シングルトン)でエラーが発生します
別のビューコントローラーからアクセスしようとすると、エラーが発生します (SocketConnection から 'GCDAsyncSocket" _strong' に割り当てられている互換性のないポインター型)
socket = [SocketConnection getInstance];