1

Xcode iOS 6 与故事板。我正在向现有程序添加聊天功能。我正在使用 GCDAsyncSocket。当我呆在一个视图控制器中时,一切都完美无缺。我需要从许多视图控制器访问打开的套接字。我还需要从这些视图控制器访问 GCDASYNCSOCKET。

有没有人有一些可能对我有帮助的示例代码?

使用 perpareforsegue 会允许我通过一个打开的套接字吗?我见过的任何单例似乎都没有考虑到已经存在的类,如 GCDASYNCSOCKET 并且似乎不起作用。

请帮我提供一些工作示例。

单身人士.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

单例.h

#import <Foundation/Foundation.h>
#import "GCDAsyncSocket.h"

@interface SocketConnection : NSObject{}


+ (SocketConnection *)getInstance;
@end

此代码(单例)给我一个错误

当我尝试从另一个视图控制器访问它时出现错误(从 SocketConnection 分配给 'GCDAsyncSocket" _strong' 的指针类型不兼容)

socket = [SocketConnection getInstance];
4

1 回答 1

1

查看代码,我发现您的错误 ( incompatible pointer types assigning to 'GCDAsyncSocket" _strong' from SocketConnection) 清楚地描述了它崩溃的原因。

在您的+getInstance方法中,您返回SocketConnection,并尝试将其分配给GCDAsyncSocket类型 ivar。创建一个属性或其他方法来提供对内部socket变量的访问。

于 2012-12-30T19:42:18.347 回答