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