2012-09-03 3 views
0

저는 UITabBarController를 사용하여 앱을 개발 중입니다. 더 구체적으로 말하면 storyBoard를 사용합니다. 모든 탭에서 서버와 데이터를 송수신 할 수 있기를 바랍니다.tabBarView에서 소켓 스트림을 관리하십시오.

문제는 어떻게해야할지 모르겠다. initNetworkCommunications가있는 첫 번째 탭만 서버와주고받을 수 있습니다. 그렇다면 내 앱이 다른 탭에서 보내고받을 수 있도록하려면 어떻게해야합니까?

NSNotificationCentre를 사용하여 데이터를 처리하는 것이 효과가 있다는 것을 알았지 만 다른 방법이 있습니까?

여기

-(void)initNetworkCommunication 
{ 
CFReadStreamRef readStream; 
CFWriteStreamRef writeStream; 
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"169.254.1.1", 2000, &readStream, &writeStream); 

inputStream = (NSInputStream *)readStream; 
outputStream = (NSOutputStream *)writeStream; 

[inputStream setDelegate:self]; 
[outputStream setDelegate:self]; 

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

[inputStream open]; 
[outputStream open]; 

} 

내가 2 개 탭이 말을 할 수있는 소켓 연결을 생성하는 코드입니다. 첫 번째 탭에는 initNetworkCommunication을 호출하는 데 사용되는 연결 버튼이 있습니다. 이 탭에서 데이터를 보내고받을 수 있습니다. 하지만 다른 탭으로 무엇을 할 수 있습니까? 이 연결을 연결하는 방법이 있습니까?

서로의 컨트롤러를 가져 와서 [FirstController sendMessage]를 사용하려고했습니다. 두 번째ViewController에서 작동하지만 작동하지 않는 것 같습니다.

답변

0

가장 간단한 방법은 싱글 톤 (Singleton)을 만드는 것입니다.이를 NetworkCommunications라고 부릅니다.

는 싱글 (하나 개의 인스턴스가 만들어집니다) 만들려면 :
+(NetworkCommunications *)sharedManager { 
    static dispatch_once_t pred; 
    static NetworkCommunications *shared = nil; 

    dispatch_once(&pred, ^{ 
     shared = [[NetworkCommunications alloc] init]; 
    }); 
    return shared; 
} 

그런 다음 당신은 단순히 [NetworkCommunications는 sharedManager] 당신의 탭에서 해당 단일 인스턴스에 액세스하려면 문의하십시오.

해당 인스턴스에도 네트워크 코드를 넣습니다.

+0

그 인스턴스에 네트워크 코드를 넣었다는 것이 무엇을 의미합니까? – user1634769

+0

initNetworkCommunication과 같은 네트워킹과 관련된 모든 메소드를 넣으십시오. – Resh32

2

싱글 톤을 만드는 것이 좋습니다. 클래스 기능을 만드는 대신 네트워크 연결을 다시 초기화해야합니다. 네트워크 연결 커넥터를 사용자 지정 구현의 속성으로 만듭니다. 한 tabBar의 :

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

@interface NetworkStorageTabBarController : UITabBarController 
@property (nonatomic, strong) NetworkController *thisNetworkController; 
@end 

및 구현 파일 :

#import "NetworkStorageTabBarController.h" 

@implementation NetworkStorageTabBarController 
@synthesize thisNetworkController; 
@end 
다음

내 탭보기를로드 할 때, 내가 처음보기의 viewWillAppear이 전화는이 나타납니다

//set up networking 
NetworkStorageTabBarController *thisTabBar = (NetworkStorageTabBarController *) self.tabBarController; 
self.thisNetworkController = thisTabBar.thisNetworkController; 
self.thisNetworkController.delegate = self; 

지금까지 이것은 나를 위해 영광스럽게 일했습니다. 영원히 그것을 이해하기 위해 나를 데려 갔다. 그래서 나는 이것이 도움이되기를 바란다!

관련 문제