【问题标题】:Swift iOS API controller stopped workingSwift iOS API 控制器停止工作
【发布时间】:2014-11-17 15:08:29
【问题描述】:

我正在使用一个文件来处理对我的 API 的调用,如下所示:

import UIKit

protocol APIControllerProtocol {
    func JSONAPIResults(results: NSArray)

}

class APIController: NSObject {
    var delegate:APIControllerProtocol?

    func GetAPIResultsAsync(urlString:String, elementName:String) {

        //The Url that will be called
        var url = NSURL.URLWithString(urlString)
        //Create a request
        var request: NSURLRequest = NSURLRequest(URL: url)
        //Create a queue to hold the call
        var queue: NSOperationQueue = NSOperationQueue()

        // Sending Asynchronous request using NSURLConnection
        NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{(response:NSURLResponse!, responseData:NSData!, error: NSError!) ->Void in
            var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
            //Serialize the JSON result into a dictionary
            let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

            //If there is a result add the data into an array
            if jsonResult.count>0 && jsonResult["\(elementName)"]?.count > 0 {

                var results: NSArray = jsonResult["\(elementName)"] as NSArray
                //Use the completion handler to pass the results
                self.delegate?.JSONAPIResults(results)

            } else {

                println(error)
            }
        })
    }
}

我用类似这样的方式来称呼它:

var APIBaseUrl: String = "http://***.se/**/**.php"
        var urlString:String = "\(APIBaseUrl)"

        self.api.delegate = self
        api.GetAPIResultsAsync(urlString, elementName:"groupActivities")

这最近效果很好,但现在我的应用程序崩溃了,我在 APIController 中突出显示了这一行:

let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

我能想到的唯一改变是我从移动 4G 互联网切换到我的 WiFi。

在日志中我得到:fatal error: unexpectedly found nil while unwrapping an Optional value

亮点说:Thread 5: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

无论我调用什么 API,都会发生这种情况。我正在运行 Xcode 6.0.1,并且最近没有进行任何更新。

干杯!

【问题讨论】:

  • 人们报告了 Xcode 6GM 和 Wifi 连接的错误。关闭,Xcode & 模拟器,清理 DerviedData 文件夹,然后重试。 stackoverflow.com/questions/25372318/…
  • 效果很好,请作为答案发布。虽然同样的错误出现在另一行,但我相信这是我的代码中的一些其他错误,因为其他 API 调用工作正常。非常感谢! @SamBudda
  • 如果设备上出现这种情况,是否有解决方案?

标签: ios json swift nsjsonserialization


【解决方案1】:

很多人都报告了 Xcode 6.0 GM 和 Wifi 连接的错误。

要解决此问题,请尝试以下步骤

  • 关闭模拟器
  • 关闭你的 Xcode
  • 转到您的 DerviedData 文件夹并删除它下面的所有文件夹。 (~/Library/Developer/Xcode/DerivedData) 不要担心当您在 Xcode 中打开项目时会再次创建文件夹。

【讨论】:

  • 同样,这对我也不起作用。我假设这只适用于模拟器? @Karthik,您是否在设备上发布此问题,因为这是我的问题
  • @MoMo 你能修复它吗?
猜你喜欢
  • 1970-01-01
  • 2018-03-05
  • 2013-03-29
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2020-01-20
  • 2012-05-23
相关资源
最近更新 更多