【问题标题】:Cast from 'String?!' to unrelated type '[[String : AnyObject]]' always fails从'字符串?!'到不相关的类型 '[[String : AnyObject]]' 总是失败
【发布时间】:2016-07-02 00:00:14
【问题描述】:

我的代码运行良好,并且在解析服务器中的一些 JSON 时不会发出警告。它运行并毫无问题地返回控制台中的值,直到我尝试导入 AWSNS 框架,然后它在标题中给我警告并在运行时崩溃说“-[__NSCFArray 长度]:无法识别的选择器发送到实例”。任何想法为什么在我导入 Amazon 的 SNS 框架时这可能会失败?

这是我的代码:

import UIKit
import AWSSNS

class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.getEvents()
}
func getEvents(){
    let requestURL: NSURL = NSURL(string: "http://www.example.com/mydirectory/JSONFile")!
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(urlRequest) {
        (data, response, error) -> Void in
        let httpResponse = response as! NSHTTPURLResponse
        let statusCode = httpResponse.statusCode
        if (statusCode == 200) {
            print("File downloaded successfully.")
            do{
                let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
                if let events = json["events"] as? [[String: AnyObject]] {
                    for event in events {
                        if let eventName = event["eventName"] as? String {
                            if let day = event["day"] as? String {
                                print(day,eventName)
                            }
                        }
                    }
                }
            }catch {
                print("Error with Json: \(error)")
            }
        }
    }
    task.resume()
}

【问题讨论】:

  • 警告出现在“if let events = json["events"] as? [[String: AnyObject]]”行上
  • 检查选项左键单击 json 以查看 Xcode 认为变量的类型,无论是否导入

标签: ios swift amazon-web-services amazon-sns


【解决方案1】:
if let events = json["events"] as? [[String: AnyObject]] {

您可能在 JSON 中有一个字符串,而您试图将其转换为字典,但这是行不通的。

在此处设置断点并检查以查看要验证的 JSON 内容。

【讨论】:

  • 我将 JSON 简化为以下内容:{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", " lastName":"Smith"}, {"firstName":"Peter","lastName":"Jones"} ]} 它工作得很好,并将正确的值返回到控制台,直到我导入 AWSSNS 框架......然后它如上所述失败。
  • 我在取消注释导入 AWSSNS 框架后立即收到警告...所以它还没有解析任何内容,因为它没有运行。
【解决方案2】:

"-[__NSCFArray length]: unrecognized selector sent to instance"

我不认为您的问题来自 JSON。如果可以解析 JSON,则说明 JSON 没有问题。检查selector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多