json - 在 Swift 3 中使用 Alamofire 的 CoreData

标签 json swift core-data swift3 alamofire

我正在使用 Alamofire 解析 JSON 数据,它工作正常。但我的目的是将JSON解析数据存储在CoreData中,并显示在tableView中。我尝试了很少的代码,但它对我不起作用

JSON解析数据和OfflineData.xcdatamodeld

enter image description here

enter image description here

这是我的代码:

 var msgdata_store = [Mydata]()
 managedObjextContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

func jsonparsing()
    {

        let Message_dataitems = Mydata(context: managedObjextContext)
        let studentId = "39"
        let params: [String: Any] = ["studentId": studentId]
        let urlString = "http://52.35.124.123/schools/rk/rkapi/api/getmessages"
        guard let url = URL(string: urlString),
            var request = try? URLRequest(url: url, method: .post, headers: nil) else{
                return
        }

        request.httpBody = params.map{ "\($0)=\($1)" }.joined(separator: "&").data(using: .utf8)

        Alamofire.request(request).responseJSON{ response in

            if let result = response.result.value as? [String:Any]
            {

                let arraydata = result["messages"] as? [[String:String]]

                for array_values in arraydata!
                {

                    let content_Vales = array_values["content"]

                    Message_dataitems.content = content_Vales
                }
                do {
                    try self.managedObjextContext.save()

                }catch {
                    print("Could not save data \(error.localizedDescription)")

                }
                self.do_table_refresh()
            }
        }
    }

    func fetchsavedata()
    {
        let presentRequest:NSFetchRequest<Mydata> = Mydata.fetchRequest()

        do {
            msgdata_store = try managedObjextContext.fetch(presentRequest)

            for test in msgdata_store
            {
                let messagecontent = test.content
             print("messagecontent",messagecontent ) as? Any
            }
        }catch {
            print("Could not load data from database \(error.localizedDescription)")
        }
      }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DetailsTableViewCell

        let row = (indexPath as NSIndexPath).row

        let attendance = msgdata_store[row] as Mydata

        cell.ContentLabel.text = attendance.content

        return cell


    }

    func do_table_refresh(){

        DispatchQueue.main.async(execute: {
            self.Tableview.reloadData()
            return
        })
    }

Mydata+CoreDataProperties,Mydata+CoreDataclass file 

extension Mydata {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Mydata> {
        return NSFetchRequest<Mydata>(entityName: "Mydata")
    }

    @NSManaged public var content: String?

}

@objc(Mydata)
public class Mydata: NSManagedObject {

}

当我运行应用程序时,tableView 仅显示最后一个值。如何将数据存储在 CoreData 中?请帮我。

最佳答案

您只创建了一个实例,这就是为什么只有一个实例存在的原因。

您在这一行创建一个实例:

let Message_dataitems = Mydata(context: managedObjextContext)

然后你有这个循环:

for array_values in arraydata!
{

    let content_Vales = array_values["content"]

    Message_dataitems.content = content_Vales
}

每次通过此循环都使用相同的 Mydata 实例。第一遍为 content 分配一个值,然后每隔一遍用新值覆盖该值。您可能应该将创建实例的行移到循环内,这样您每次都创建一个新实例,而不是一遍又一遍地重复使用同一个实例。

关于json - 在 Swift 3 中使用 Alamofire 的 CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48891469/

相关文章:

ios - 在 IOS 中获取 CoreData

javascript - lodash set Object - 无法创建以整数作为键的子对象

c# - JsonConverter 和 EntityData

javascript - 构建图表编辑器 - 如何创建数据驱动图表

iOS - 在 Swift 中调用 Webservice 和解析 JSON

ios - iPhone X 的 KeyboardWillShowNotification 上的 Textview 移动速度高于预期

ios - 如何传递符合协议(protocol)的类类型

swift - 如何在 Swift 中无缝过渡到 Interstitial iAd?

core-data - NSPersistentDocument + StoryBoards : not mixed properly for me

arrays - swift 中的核心数据数组