Создайте новый список областей и добавьте элементы

Я делаю запрос API с Alamofire, затем получаю ответ в формате JSON, затем анализирую JSON в NSDictionary, чтобы получить нужные мне данные. Данные, которые я получаю, представляют собой четыре Arrays разных элемента. Я хочу создать новый список в Realm для сохранения этих элементов. Вот мои классы объектов Realm:

class ListOfDefinitions: Object {
 let listOfItems = List<Item>()
}

а также

class Item: Object {

dynamic var AverageCost = Int()
dynamic var Barcode = ""
dynamic var Description = ""
dynamic var InternalUnique = Int()
dynamic var LastCost = Int()
dynamic var LimitToMainRegionUnique = Int()
dynamic var Notes = ""
dynamic var StockCategoryUnique = Int()
dynamic var StockCode = ""
dynamic var StockGroupUnique = Int()
dynamic var UnitDescriptor = ""
}

Вот мой код того, как я обрабатываю ответ JSON и где я хочу сохранить данные в своем коде.

 var newItemInStockList : ListOfDefinitions!   // declared in the class
 let newItemInStock = Item()


.responseJSON { response in



            switch response.result {

            case .Success(let JSON):
               // print("Success with JSON: \(JSON)")

                let response = JSON as! NSDictionary



                let responseParams = response.objectForKey("ResponseParameters") as! NSDictionary
                //print(responseParams)

                //let stockItemGroupList = responseParams.objectForKey("StockItemGroupList")

                let stockItemList = responseParams.objectForKey("StockItemList") as! NSDictionary
                //print(stockItemList)

                let listofDefinitions = stockItemList.objectForKey("ListofDefinitions") as! NSArray
                print(listofDefinitions.count)


                for defJson in listofDefinitions {

                    print(defJson["Description"])

                    someString = defJson["Description"] as! String
                    print(someString)
// Because there are 4 arrays of items this for loop will be red 4 times, each time it is red I want o create a new list and add the items to the list
//  This comment area is where I tried to create a new list and then .append the items in it, but it doesn't work.                   
//                        let newOne = ListOfDefinitions()
//                        
//                        
//                        try! realm.write{
//                            
//                            realm.add(newOne)
//                        }
//                        self.newItemInStock.AverageCost = defJson["AverageCost"] as! Int
//                        self.newItemInStock.Barcode = defJson["Barcode"] as! String
//                        self.newItemInStock.Description = defJson["Description"] as! String
//                        self.newItemInStock.InternalUnique = defJson["InternalUnique"] as! Int
//                        self.newItemInStock.LastCost = defJson["LastCost"] as! Int
//                        self.newItemInStock.LimitToMainRegionUnique = defJson["LimitToMainRegionUnique"] as! Int
//                        self.newItemInStock.Notes = defJson["Notes"] as! String
//                        self.newItemInStock.StockCategoryUnique = defJson["StockCategoryUnique"] as! Int
//                        self.newItemInStock.StockCode = defJson["StockCode"] as! String
//                        self.newItemInStock.StockGroupUnique = defJson["StockGroupUnique"] as! Int
//                        self.newItemInStock.UnitDescriptor = defJson["UnitDescriptor"] as! String
//                        
//                        try! realm.write{
//                            
//                            self.newItemInStockList.listOfItems.append(self.newItemInStock)
//                        }

                }

            case .Failure(let error):
                print("Request failed with error: \(error)")
            }

И вот что я получаю, когда печатаю 4 массива

введите здесь описание изображения


person Len_X    schedule 23.09.2016    source источник
comment
Когда вы говорите, данные, которые я получаю, это четыре Arrays разных элемента. Вы имеете в виду массив из 4 элементов?   -  person wint    schedule 23.09.2016
comment
Да, это массив из 4 элементов, каждый из которых содержит значение AverageCost = 0; Штрих-код = ; Описание = ИСПЫТАТЕЛЬНЫЙ ПУНКТ 2; Внутренний Уникальный = 2; ЛастКост = 0; LimitToMainRegionUnique = -1; Примечания = ; StockCategoryUnique = 0; Складской код = BBCD45785; StockGroupUnique = 0; UnitDescriptor = Единицы;   -  person Len_X    schedule 23.09.2016
comment
извините, если это немного грязно, немного хрустит   -  person Len_X    schedule 23.09.2016
comment
Что вы используете для сопоставления JSON с Realm Object?   -  person wint    schedule 23.09.2016
comment
self.newItemInStock.AverageCost = defJson[AverageCost] as! Интерн.   -  person Len_X    schedule 23.09.2016
comment
Я прокомментировал это в коде, потому что сначала мне нужно создать новый список, привести JSON к объекту Realm следующим образом (self.newItemInStock.AverageCost = defJson[AverageCost] as! Int) и добавить его в список внутри каждого петля   -  person Len_X    schedule 23.09.2016
comment
но я не могу создать новый список   -  person Len_X    schedule 23.09.2016


Ответы (2)


Глядя на ваш пример кода, я думаю, что основная проблема здесь заключается в том, что вы повторно используете один и тот же экземпляр self.newItemInStock для каждого объекта, который вы добавляете в список.

Было бы лучше создать новый объект Item в цикле и добавить его к объекту List.

person TiM    schedule 27.09.2016

Я рекомендую использовать комбинацию AlamofireObjectMapper для обработки всех ваших сопоставлений JSON (в обоих направлениях) https://github.com/tristanhimmelman/AlamofireObjectMapper

и ListTransform, найденный в ObjectMapper+Realm https://github.com/Jakenberg/ObjectMapper-Realm

Они оба доступны для установки черезcocopods. Ваш код будет выглядеть намного чище и проще в обслуживании

person Guy    schedule 27.10.2016