【发布时间】:2014-03-05 16:34:21
【问题描述】:
我正在为我的应用程序使用套接字模块。第一次,我使用每个 UI 来创建新的套接字连接,这意味着每次用户将 VC 更改为另一个时都会导致新的套接字连接。
所以我决定将我的套接字代表移到 Appdelegate 中,问题从那里开始。我有一个监听端口的委托,如果有任何收入事件,它会捕获、反序列化 JSon 到 NSArray 并发送回用户看到的当前视图控制器。
问题是,在那个循环之后,整个 ViewController 数据就消失了,包括(segue 从前一个视图控制器传递的数据)。
这是我的代码:(已更新)
在 Appdelegate.m 中
- (void) socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet
{
NSArray *args = [packet.dataAsJSON objectForKey:@"args"];
Mesajlar *MSG = [[Mesajlar alloc] init];
[MSG didReceiveEventFromSocket:args];
}
在当前的 ViewController 中:(Mesajlar.m)
-(void) didReceiveEventFromSocket:(NSArray *)args
{
//NSLog(@"Instance called by Appdelegate");
NSString *dataMode = [[args valueForKey:@"dataMode"] objectAtIndex:0];
NSArray *messageContent = [[args valueForKey:@"messageContent"] objectAtIndex:0];
}
在调用 Mesajlar.m 的 didReceiveEventFromSocket 后,整个数据和属性刚刚被删除,我认为因为,一旦 socket 收到事件,它只是来到 Appdelegate 的实例而不知道 Mesajlar.m,它会推送 Mesajlar.m 的实例.方向是这样 Mesajlar.m -> 如果有任何事件调用 Appdelegate -> 转到 Mesajlar.M
如何在不丢失当前 ViewController 属性的情况下保持连接并从 Appdelegate 向其他 UI 发送事件?
最好的问候。 继续
【问题讨论】:
-
ViewController 数据是什么意思?
-
在应用委托中显示您的代码。
-
我添加了代码@rdelmar
-
你正在用 [[Mesajlar alloc] init] 实例化一个新的视图控制器,所以它当然不会有任何以前的数据。您需要参考已有的参考。你如何做到这一点取决于你的控制器层次结构。
-
我应该使用 NSNotificationCenter 吗?或者如果是的话,会怎么样? @rdelmar
标签: ios objective-c uiviewcontroller segue appdelegate