2015-10-31 1 views
0

Swift 2.1 Xcode 7.1 Alamofire 2.0.2Swift: Не удалось бросить значение типа «» NSNull с использованием NSObjects «NSDictionary»

С помощью функции Alamofire я описал ниже Я получение списка листовок в формат JSON с API:

Alamofire.request(Router.GetList()).responseJSON { (_, _, result) in 
     var flyers = [Flyer]() 

     switch result { 
     case .Success(let json): 
      if let responseObject = json as? [String: AnyObject], let hits = responseObject["hits"] as? [[String: AnyObject]] { 
print(hits) 
      for dictionary in hits { 
       flyers.append(Flyer(dictionary: dictionary)) 
      } 

      completionHandler(flyers, nil) 
      } 
     case .Failure(_, let error): 
      completionHandler(nil, error as NSError) 
     } 
    } 

ответ JSON в результате печатающих (хитов) является:

[["title": Code 103, 
"event": { 
    "_id" = 54b0561f274441073751; 
    name = "Code 103"; 
    } 
], 
["title": Code 104, 
"event": { 
    "_id" = 54b0561f274441073752; 
    name = "Code 104"; 
    } 
]] 

, как вы можете увидеть ниже, класс Flyer имеет свойство ("событие"), который ссылки два пропе rties из класса Event, id and name:

class Flyer: NSObject{ 

    var title: String? 
    var event: Event? 

    init(dictionary: [String: AnyObject]) { 
    title = dictionary["title"] as? String 
    event = Event(dictionary: dictionary["event"] as! [String: AnyObject]) 
    } 
} 

class Event: NSObject{ 

    var id: String? 
    var name: String? 

    init(dictionary: [String: AnyObject]){ 

    id    = dictionary["id"] as? String 
    name   = dictionary["name"] as? String 
    } 
} 

Im получаю следующую ошибку:

Could not cast value of type 'NSNull' (0x107d50378) to 'NSDictionary' (0x107d4fd60). 

эта ошибка находится в классе Flyer в строке:

event = Event(dictionary: dictionary["event"] as! [String: AnyObject]) 

И я дону Не знаю, что я могу сделать, чтобы решить эту проблему, потому что ответ не равен нулю. Ценить помощь

+0

Похоже, что значение для ключа 'event' может быть' nil', которое представлено объектом 'NSNull'. Отфильтруйте эти случаи и обработайте их соответствующим образом. – vadian

ответ

0

Следующее прекрасно работает на детской площадке: попробуйте сделать чистку и перестроить.

let json: AnyObject = [ 
    "hits": [ 
     [ 
      "title": "Code 103", 
      "event": [ 
      "_id": "54b0561f274441073751", 
      "name": "Code 103" 
      ] 
     ], 
     [ 
      "title": "Code 104", 
      "event": [ 
       "_id": "54b0561f274441073752", 
       "name": "Code 104" 
      ] 
     ] 
    ] 
] 

class Flyer: NSObject{ 

    var title: String? 
    var event: Event? 

    init(dictionary: [String: AnyObject]) { 
     title = dictionary["title"] as? String 
     event = Event(dictionary: dictionary["event"] as! [String: AnyObject]) 
    } 
} 

class Event: NSObject{ 

    var id: String? 
    var name: String? 

    init(dictionary: [String: AnyObject]){ 

     id = dictionary["id"] as? String 
     name = dictionary["name"] as? String 
    } 
} 

var flyers = [Flyer]() 

if let responseObject = json as? [String: AnyObject], let hits = responseObject["hits"] as? [[String: AnyObject]] { 
    print(hits) 
    for dictionary in hits { 
     flyers.append(Flyer(dictionary: dictionary)) 
    } 
} 
Смежные вопросы