1

首先,对不起我的英语......我正在开发一个具有 UITabBarController 的 iOS 应用程序。我想从此 UITabBarController 初始化套接字,以管理应用程序内部发生的任何事件。

问题是我不知道该怎么做。使用我的套接字,我可以将消息发送到服务器并从该服务器接收它们。如果我在其他选项卡项目中,我想接收事件。

这是我创建套接字的代码:

- (void) initNetworkCommunication {

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"212.227.52.247", 9191,  &readStream, &writeStream);

inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];

[self activarUsuario];
}

我有一个发送消息的视图,但我想在我的 UITabBarController 中的所有视图中处理事件,比如 WhatsApp 她你收到一条新消息......

有人能帮助我吗?

我已经在谷歌搜索了几天,但我没有找到任何东西......

非常感谢你!!

4

1 回答 1

1

也许您可以将您的套接字通信代码移动到另一个类,可能是 App Delegate 或另一个单例类型类。每当您收到事件时,您都可以使用默认值NSNotificationCenter以及包含您收到的事件的数据字典发布该信息。

完成此操作后,您可以让每个实例注册以使用该方法UIViewController接收通知。NSNotificationCenter addObserver:selector:name:object:每当您的UIViewController实例收到通知时,它都会调用您在选择器中指定的方法。

当您在套接字代码中收到事件时,您可以像这样发布通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION_TYPE" object:sender userInfo:yourDictionaryOfEventData];

您可以像这样在方法中注册通知UIViewController viewWillAppear:...(如果您想在视图不可见/加载时收到通知,您可以在 init 中执行此操作)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedEvent:) name:@"MY_NOTIFICATION_TYPE" object:sender];

最后,不要忘记取消注册viewWillDisappear:. UIViewController(或者如果您在 init 中为它们注册,则为 dealloc)

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MY_NOTIFICATION_TYPE" object:sender];

NSNotification 苹果文档

于 2012-06-27T16:57:56.010 回答