如何将 CoreData 值同步到远程 SQL Server

问题描述 投票:0回答:0

这是一个基本的出勤应用程序,可以捕获 TimeIn/TimeOut 并保存到 CoreData。 我试图找到将我的 CoreData 值同步到远程 SQL Server 的最佳方法。我需要它在每天结束时同步一个小数据集,从今天的日期过滤。我尝试了以下课程,但我真的很陌生。任何帮助将不胜感激。

这些是我的问题:

  1. 首先,我不太确定这是否是同步数据的最佳方法
  2. 我无法弄清楚如何在 @FetchRequest 中应用谓词来过滤 CoreData 仅获取今天的值(日期 - datday 是一个字符串) - 出现以下错误: 不能在属性初始值设定项中使用实例成员“datDay”;属性初始化程序在“self”可用之前运行

我的班级代码:

import Foundation
import SwiftUI

class CODataModel: ObservableObject {
    @Published var entries = [COData]()
    @Published var authenticated = ""
    
    
    @AppStorage(CurrentUserDefaults.tzone) var currentTzone: String?
    let dateFormatter = DateFormatter()

    
    @Environment(\.managedObjectContext) private var viewContext
    @FetchRequest(entity: Attendances.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Attendances.dateStamp, ascending: true)], predicate: NSPredicate(format: "datday = %@", datDay(dt: Date())))
    private var attendance: FetchedResults<Attendances>
    
    func uploadCoreData() {
        attendance.forEach { (attendance) in
            let uid = attendance.uid
            let lat = attendance.lat
            let lon = attendance.lon
            let placemark = attendance.placemark
            let timein = attendance.time_in
            let timeout = attendance.time_out
            let datday = attendance.datday
            
            do{
                auth(uid: uid!, lat: lat!, lon: lon!, placemark: placemark!, time_in: timein!, time_out: timeout!, datday: datday!)
                
            }

        }

    }


    func auth(uid: String, lat: String, lon: String, placemark: String, time_in: String, time_out: String, datday: String) {
        
        let uid: String = uid
        let lat: String = lat
        let lon: String = lon
        let placemark: String = placemark
        let time_in: String = time_in
        let time_out: String = time_out
        let datday: String = datday

        let cid: UUID = UUID()
        
        let repTimeIn: String = time_in.replacingOccurrences(of: " ", with: "+")
        let repTimeOut: String = time_out.replacingOccurrences(of: " ", with: "+")
        let repPlacemark: String = placemark.replacingOccurrences(of: " ", with: "+")
        
        guard let url = URL(string: "\(AppDefaults.endpoint_url)?uid=\(uid)&lat=\(lat)&lon=\(lon)&placemark=\(repPlacemark)&timein=\(repTimeIn)&timeout=\(repTimeOut)&datday=\(datday)&cid=\(cid)") else { return }
                                
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")


        URLSession.shared.dataTask(with: request) { (data, response, error) in

            guard let data=data else{return}

            let transData=try! JSONDecoder().decode(COData.self, from: data)

            DispatchQueue.main.async {
                
                
                self.entries = [transData]
                self.authenticated = transData.auth

                if transData.auth == "0001" {

                }

            }

        }.resume()
        

    }
    
    func datDay(dt: Date) -> String {
        self.dateFormatter.timeZone = TimeZone(identifier: currentTzone!)
        self.dateFormatter.dateFormat = "MM/dd/yyyy"
        let dte = dateFormatter.string(from: dt)
        
        return dte
    }
}
core-data synchronization nspredicate
© www.soinside.com 2019 - 2024. All rights reserved.