在tabBarView管理套接字流

问题描述:

我正在开发一个应用程序使用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];来自secondViewController但似乎不起作用。

最简单的方法是创建一个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

创建一个singleton很好,我所做的就是不用创建一个类函数(这将迫使你的网络在每次切换标签页时重新初始化连接)我使用networkconnector作为自定义实现的一个属性的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; 

到目前为止,这对我来说是光荣的。让我永远把它弄清楚,所以我希望这有助于!