ios - 带套接字的应用程序,显示警报返回到根 Controller

标签 ios objective-c sockets uialertview

在我使用 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/

相关文章:

python - python中的端口扫描器

ios - iOS 应用程序警报和通知中的表情符号 - Xcode/Swift

ios - UIImagePickerController 在关闭时弄乱标签栏框架

iOS "Cannot Decode"m3u8

objective-c - 从 Objective-C 发送消息并获取返回值?

ios - 如何在iOS中找到整数的nsarray的四分位数

iphone - viewcontroller 中 UIView Action 的子类

c++ - Boost Socket 在 close() 上崩溃

java - 服务器通过端点监听端口

ios - 如何向 UITableViewCell 分隔线添加阴影?