如何修复“ Data(contentsOf:url)崩溃的应用程序”?

时间:2019-09-23 22:18:42

标签: ios swift xcode

当我运行data = try! Data(contentsOf: url)时,我的应用程序崩溃了,并且出现了此错误。我尝试添加UIConstraintBasedLayoutDebugging断点,但是并没有太大帮助。

The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2019-09-23 15:59:55.228440-0600 Biobot[15968:547259] -[LGSideMenuController isLoading]: unrecognized selector sent to instance 0x7f9cf90a1a00
Warning: hit breakpoint while running function, skipping commands and conditions to prevent recursion.
error: Execution was interrupted, reason: breakpoint 4.1.
The process has been returned to the state before expression evaluation.

我的代码中甚至没有[LGSideMenuController isLoading]。这次我真的迷路了,因为今天早上代码工作得很好。我将我的xcode更新为版本11,我不知道这是否可能导致问题

1 个答案:

答案 0 :(得分:1)

更新:

仅当从本地存储加载数据时才应使用Data(contentsOf: url)(因此,仅以file://开头的url)。从Internet加载数据时,应使用URLSession:

URLSession.shared.dataTask(with: url) { (data, response, error) in

    DispatchQueue.main.async { //all changes to UI must be called on main thread
        if let error = error {
            print("Error: \(error)")
            return
        }
        //transform your data and update UI
        self.label.text = "Loaded data: \(data)"
    }
}.resume()

其中self.label.text = "Loaded data: \(data)"是可以处理所获取数据的示例。


尝试避免使用try!。代替使用do{} catch {}。您的代码可能无法按预期工作(它不能解决问题,但您将能够获得更多详细信息)。因此,在您的代码中执行以下操作:

do {
 data = try Data(contentsOf: url)
} catch {
 print("\(error)")
}

对我来说,您的错误看起来与数据加载无关。它看起来更像是内存处理方面的问题,因为您有一个指向LGSideMenuController实例的指针,而您(或您正在使用的一个库)尝试在上调用isLoading方法它。