2012-12-30 4 views
1

Xcode iOS 6 with storyboard. 이미 기존 프로그램에 채팅 기능을 추가하고 있습니다. GCDAsyncSocket을 사용하고 있습니다. 하나의 viewcontroller 내에있을 때 모든 것이 완벽하게 작동합니다. 많은 viewcontroller에서 열린 소켓에 액세스해야합니다. 또한 이러한 viewcontroller에서 GCDASYNCSOCKET에 액세스해야합니다.보기 컨트롤러 (스토리 보드)간에 열린 소켓 전달하는 방법

누군가 나를 도와 줄 수있는 몇 가지 예제 코드가 있습니까?

perpareforsegue를 사용하면 오픈 소켓을 통과 할 수 있습니까? 내가 본 싱글 톤은 GCDASYNCSOCKET과 같은 기존 클래스를 고려하지 않고 작동하지 않는 것 같습니다.

몇 가지 실제 예를 들어 도와주세요.

내가 오류가 다른의 ViewController에서 액세스하려고하면 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]; 
+0

prepareForSegue 동안 원하는 참조를 전달할 수 있으며, 싱글 톤 설명은 매우 모호하게 들립니다. 시도한 코드 중 일부를 표시 할 수 있습니까? – jrturton

+0

jrTurton - 위의 싱글 톤 코드를 추가했습니다. 만약 내가 당신이 "viewcontroller 내 open socket을 이동하기 위해 prepareForSegue를 사용할 수 있다고 말하는 것이 더 쉬울 수도있다. AppDelgate에 코드를 넣는 것을 포기하고 작동하지 않는 싱글 톤과 함께갔습니다. 제안 생각? – CrazyGoose

답변

1

코드를 보면 사용자의 오류 (incompatible pointer types assigning to 'GCDAsyncSocket" _strong' from SocketConnection)가 충돌하는 이유를 분명히 알 수 있습니다.

+getInstance 메서드에서 SocketConnection을 반환하고 GCDAsyncSocket 유형 ivar에 할당하려고합니다. 내부 socket 변수에 대한 액세스를 제공하는 속성 또는 다른 메서드를 만듭니다.