2015-02-26 2 views
0

Мне нужно создать объект JSON в формате, показанном ниже.NSObject не имеет члена с именем Key error

{ 
    "DeviceCredentials": { 
    "UniqueId": "sample string 1" 
    }, 
    "Handovers": [ 
    { 
     "Occasions": [ 
     { 
      "Id": 1 
     }, 
     { 
      "Id": 1 
     } 
     ] 
    } 
    ] 
} 

Существует проблема, хотя с Occasions массива, хотя. Количество объектов Occasion меняется. Иногда может быть только один случай, иногда кратный. Поскольку это динамическое, я написал метод ниже для создания этого массива.

func getOccasionArray(handover: Handover) -> JSON { 
    var occArray = [[String: NSNumber]]() 
    for occ in handover.occasions { 
     let occasion = occ as Occasion 
     var obj = ["Id": occasion.id!] 
     occArray.append(obj) 
    } 
    let json = JSON(occArray) 
    return json 
} 

Я использую SwiftyJSON библиотеку, чтобы преобразовать созданный массив JSON. Вот возвращаемый результат переменной json, который выглядит как хэндовер, который имеет только один случай.

[ 
    { 
    "Id" : 243468 
    } 
] 

Пока все хорошо. Проблема в том, что у меня возникли проблемы с подключением к более крупному ответу JSON. Просто вызов метода, подобного этому, дает ошибку «NSObject» не имеет члена с именем «Ключ».

var parameters = [String: NSObject]() 

parameters = [ 
    "DeviceCredentials": [ 
     "UniqueId": "1212121212" 
    ], 
    "Handovers": [ 
     [ 
      "Occasions": getOccasionArray(handover) 
     ] 
    ] 
] 

Я попытался преобразования возвращаемого значения в массив getOccasionArray(handover).arrayValue, но без изменений.

Любая идея о том, как исправить это?

Спасибо.

ответ

1

Вам не нужно SwiftyJSON здесь тогда:

сделать свой 'getOccasionArray', чтобы вернуть [String: NSObject]

func getOccasionArray(handover: Handover) -> [String: NSObject] { 
    var occArray = [[String: NSNumber]]() 
    for occ in handover.occasions { 
    let occasion = occ as Occasion 
    var obj = ["Id": occasion.id!] 
    occArray.append(obj) 
    } 
    return occArray 
} 

Определить параметры, как [Строка: NSObject]:

var parameters = [[String: NSObject]]() 

var json: [String: NSObject] = getOccasionArray(handover)   

parameters = [["DeviceCredentials": ["UniqueId": "1212121212"], "Handovers": ["Occasions": json]]] 
+0

К сожалению, у меня не может быть типа переменной 'parameters' как' JSON'. Вы видите, что мне нужно передать этот объект JSON в качестве параметра для запроса URL. Я использую Alamofire для обработки запросов HTTP, и он принимает только параметр в формате '[String: AnyObject]'. – Isuru

+0

О, хорошо, это должно сработать, если вы оставите его как: [String: NSObject], пока вы меняете getOccasionArray, чтобы вернуть это тоже. Тогда вы можете держаться подальше от swiftyJSON. Я отредактировал сообщение выше – Gwendle

+0

Спасибо. Это сработало! Хотя мне пришлось изменить тип возвращаемого метода метода getOccasionArray '' [[String: NSObject]] и 'occArray' на' [[String: NSObject]]() '. Теперь все работает нормально. Спасибо. – Isuru