2016-09-23 2 views
0

Я делаю API запрос с Alamofire, я затем получить ответ в формате JSON, то я разобрать JSON в NSDictionary, чтобы добраться до данных я хочу. Данные, которые я получаю, это четыре Arrays разных товаров. Я хочу к создать новый список в Realm, чтобы сохранить эти пункты в Вот мои 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 Массивы

enter image description here

+0

Когда вы произносите «Данные, которые я получаю, это четыре« Массивы »разных предметов». Вы имеете в виду массив из 4 предметов? – wint

+0

Да, это массив из 4 предметов, каждый элемент содержит AverageCost = 0; Barcode = ""; Описание = "ИСПЫТАТЕЛЬНЫЙ ПУНКТ 2"; InternalUnique = 2; LastCost = 0; LimitToMainRegionUnique = "-1"; Примечания = ""; StockCategoryUnique = 0; StockCode = BBCD45785; StockGroupUnique = 0; UnitDescriptor = Единицы; –

+0

извините, если это немного беспорядочно, в бит Crunch –

ответ

1

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

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

0

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

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

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

Смежные вопросы