UIAlertController 不能被其他类调用
Posted
技术标签:
【中文标题】UIAlertController 不能被其他类调用【英文标题】:UIAlertController can't be called by other class 【发布时间】:2016-01-05 17:37:05 【问题描述】:我正在尝试编写一个用于解析 xml 的类。我想在发生错误时显示警报。 这是我的代码:
解析.swift
func parserXml(xmlUrl:String,completionHandler:([(staID: String, staName: String, ava: String, unava: String)]->Void)?)->Void
self.paraserCompletionHandler = completionHandler
let request = NSURLRequest(URL: NSURL(string: xmlUrl)!)
let urlConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
urlConfig.timeoutIntervalForRequest = 30
urlConfig.timeoutIntervalForResource = 60
let urlSession = NSURLSession(configuration: urlConfig, delegate: self, delegateQueue: nil)
let task = urlSession.dataTaskWithRequest(request, completionHandler: (data,response,error)->Void in
if error != nil
print(error?.localizedDescription)
if (error?.code == NSURLErrorTimedOut || error?.code == NSURLErrorNotConnectedToInternet)
let vc = ViewController()
vc.alertView()
else
let parser = NSXMLParser(data: data!)
parser.delegate = self
parser.parse()
)
task.resume()
ViewController.swift
func alertView()
var alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .Alert)
var okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default)
self.presentViewController(alertController, animated: true, completion: nil)
当我运行我的应用程序时,我的应用程序崩溃并显示错误
致命错误:在展开可选值时意外发现 nil
编辑:Xcode 停止在
self.presentViewController(alertController, animated: true, completion: nil)
我猜原因是 ViewController.swift 中的 alertController 被 Parse.swift 调用了
谁能解决这个问题?谢谢
【问题讨论】:
当应用程序崩溃时,Xcode 应该停止在有问题的行。哪条线? 停在 self.presentViewController(alertController, animated: true, completion: nil) 【参考方案1】:在 Parse.swift 中抛出 custom exception 并在 ViewController.swift 中捕获它。您可以创建一个自定义类 (NSException),在其中建立此 exception
并将其实现到两者中。
这里是help 处理不熟悉的异常。
if error
print(error?.localizedDescription)
if (error?.code == NSURLErrorTimedOut ||
error?.code == NSURLErrorNotConnectedToInternet)
@throw [[CustomException alloc] initWithName:@"Title"
reason:@"Message"
userInfo:nil];
else
let parser = NSXMLParser(data: data!)
parser.delegate = self
parser.parse()
在 ViewController
try()
调用 parserXml(...) 然后在 catch()
中,当你以这种方式发出警报时,你可以在 parserXml(...)
中抛出多个异常,如果你是这样的话,这将使下一个语句完美有多种你想显示的错误类型。
catch (YourCustomException *ce)
alertController = UIAlertController(title: ce.name,
message: ce.message,
preferredStyle: .Alert)
【讨论】:
我用另一种方式来做我想做的事,但我认为你的回答也很有用。谢谢你的帮助:)以上是关于UIAlertController 不能被其他类调用的主要内容,如果未能解决你的问题,请参考以下文章
UIAlertController 的文本字段委托没有被调用
如何在 UIPopoverController 的所有其他视图之上显示 UIAlertController?
如何强制 AutoClosable 警告传播到 Java 中的类调用者?
检测 UIAlertController 何时被另一个 UIViewController 解除