我正在使用 Alamofire 解析 JSON 数据,它工作正常。但我的目的是将JSON解析数据存储在CoreData中,并显示在tableView中。我尝试了很少的代码,但它对我不起作用
JSON解析数据和OfflineData.xcdatamodeld
这是我的代码:
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/