带套接字的应用程序,向根控制器显示警报 returns

app with sockets, showing alerts returns to the root controller

在我使用 SocketRocket 构建的应用程序中是一个 websockets 客户端,当出现警报或错误时,服务器会向该应用程序发送适当的消息。

所有套接字通信代码,例如重要的:

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {[...] }

存在于应用程序的根 viewcontroller 中。

所有消息处理都在另一个 class 上进行,用户可以在应用程序中自由导航。

当我想通过从服务器(UIAlertView 或 UIAlertController)收到的消息显示一个简单的警报和一个 "OK" 按钮(只是关闭它)时,只要用户单击 "OK" 按钮它们将返回到第一个(根)视图控制器,在我的例子中是一个登录凭据屏幕。

目前触发警报的代码在根控制器的 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;

    } 
  }
}

用户是否可以关闭警报并保持在同一屏幕上?我该怎么做?

我想尽可能避免在每个屏幕上都执行一个功能来显示警报...

谢谢!

据我所知,您显示的代码与不同视图之间的导航无关。如果您已经实现了一些 UIAlertViewDelegate 方法并手动执行,则按下 OK 按钮将仅更改视图(推送或弹出)。

建议:将delegate:self更改为delegate:nil以禁用所有可能的副作用。现在按 OK 按钮应该只删除弹出窗口而不是其他任何内容。