创建新的领域列表并添加项目

Posted

技术标签:

【中文标题】创建新的领域列表并添加项目【英文标题】:Create new Realm List and add items 【发布时间】:2016-09-23 03:55:57 【问题描述】:

我使用Alamofire 发出API 请求,然后我得到JSON 格式的响应,然后我将JSON 解析为NSDictionary 以获取我想要的数据。 我得到的数据是四个Arrays 的不同项目。 我想在 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 个数组时得到的结果

【问题讨论】:

当你说“我得到的数据是四个 Arrays 的不同项目。”你的意思是一个包含 4 个项目的数组? 是的,它是一个包含 4 个项目的数组,每个项目包含 AverageCost = 0;条码 = "";描述 = "测试项目 2";内部唯一 = 2;最后成本 = 0; LimitToMainRegionUnique = "-1";注释 = ""; StockCategoryUnique = 0;股票代码 = BBCD45785; StockGroupUnique = 0; UnitDescriptor = 单位; 对不起,如果有点乱,有点紧缩 你用什么将JSON映射到Realm Object self.newItemInStock.AverageCost = defJson["AverageCost"] 如!诠释 【参考方案1】:

查看您的示例代码,我认为这里发生的主要问题是您正在为要添加到列表中的每个对象重复使用相同的 self.newItemInStock 实例。

最好在循环中创建一个新的Item 对象并将其附加到List 对象。

【讨论】:

【参考方案2】:

我建议使用 AlamofireObjectMapper 的组合来处理所有 JSON 映射(两种方式)https://github.com/tristanhimmelman/AlamofireObjectMapper

以及在 ObjectMapper+Realm https://github.com/Jakenberg/ObjectMapper-Realm 中找到的 ListTransform

它们都可以通过 cocoapods 安装。你的代码看起来会更干净,更容易维护

【讨论】:

以上是关于创建新的领域列表并添加项目的主要内容,如果未能解决你的问题,请参考以下文章

UML和模式应用5:细化阶段--如何创建领域模型

领域对象列表函数未定义,即使对象已定义且列表已填充

如何从 SwiftUI 列表和领域中删除数据

如何将 MongoDB 领域应用程序用户添加到 Atlas 集合?

如何在不打开领域文件的情况下检查我的领域架构版本?

新用户到领域模式