在我使用 SocketRocket 构建的应用程序中,它是一个 websockets 客户端,当出现警报或错误时,服务器会向该应用程序发送适当的消息。
所有的套接字通信代码,例如重要的:
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {[...] }
存在于应用的 Root View Controller 中。
所有消息处理都在另一个类中进行,用户可以在应用程序中自由导航。
当我想通过从服务器(UIAlertView 或 UIAlertController)收到的消息显示一个简单的警报和一个“确定”按钮(只是关闭它)时,一旦用户单击“确定”按钮,他们返回到第一个(根) View Controller ,在我的例子中是一个登录凭据屏幕。
目前触发警报的代码在根 Controller 的 didReceiveMessage 中。
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
NSData *data = [message dataUsingEncoding:NSUTF8StringEncoding];
syncDevices *syncDev = [syncDevices new];
NSArray *devArr;
devArr = [syncDev parseDeviceXMLData:data];
if (devArr.count > 0) {
if ([devArr[0] isEqual: @"error"]) {
// error message receved, display an alert!
UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Warning!"
message:devArr[1]
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[errorAlert show];
return;
}
}
}
用户是否可以关闭警报并保持在同一屏幕上?我该怎么做?
我想尽可能避免在每个屏幕上都执行一个函数来显示警报...
谢谢!
最佳答案
据我所知,您显示的代码与不同 View 之间的导航无关。如果您已经实现了一些 UIAlertViewDelegate 方法并且手动执行,则按下 OK 按钮将仅更改 View (推送或弹出)。
建议:将 delegate:self
更改为 delegate:nil
以禁用所有可能的副作用。现在按下 OK 按钮应该只删除弹出窗口而不是其他任何东西。
关于ios - 带套接字的应用程序,显示警报返回到根 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404020/