将 Xcode 12.4 升级到 13.3.1 后数据未正确保存
Data not saving correctly after upgrading Xcode 12.4 to 13.3.1
我正在开发一个使用 Xcode 12.4 的应用程序,它保存正确。现在我有了一台新电脑并升级到 Xcode 13.3.1 当我输入“123456”时它保存为“12345”如果我输入“1234567”然后在保存之前删除“7”它保存为“ 12345”。如果我输入“12345”或“1234567”然后点击保存,它就可以正常工作。
我不知道代码的哪一部分可能导致此问题或需要包含哪些其他信息。
我认为这是一个 Xcode 问题,而不是我的代码的问题。
我在保存按钮上有一个打印语句,但当时的代码是错误的。 “123456”打印为“12345”
struct AddTripView: View {
@Environment(\.presentationMode) var presentationMode
@StateObject private var addTripViewModel: AddTripViewModel
init(repo: RepositoryProtocol) {
_addTripViewModel = StateObject<AddTripViewModel>.init(wrappedValue: AddTripViewModel(repo: repo))
}
var body: some View {
Form {
HStack {
Text("BOL:").fontWeight(.bold)
TextField("BOL", text: $addTripViewModel.bol).keyboardType(.numberPad)
}
}
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button {
addTripViewModel.addTrip()
print("AddView \(addTripViewModel.bol)")
presentationMode.wrappedValue.dismiss()
} label: {
Text("Save")
}
}
}
}
}
class AddTripViewModel: ObservableObject {
private let repo: RepositoryProtocol
@Published var saved: Bool = false
var bol: String = ""
init(repo: RepositoryProtocol) {
self.repo = repo
}
func addTrip() {
let trip = Trip(uid: "",
bol: bol)
repo.addTrip(trip: trip) { result in
switch result {
case .success(let savedTrip):
DispatchQueue.main.async {
self.saved = savedTrip == nil ? false : true
}
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
class FirebaseRepository: RepositoryProtocol {
private let db = Firestore.firestore()
func getAllTrips(completion: @escaping (Result<[Trip]?, Error>) -> Void) {
let userId = Auth.auth().currentUser?.uid
db.collection("trips")
.whereField("userId", isEqualTo: userId!)
.getDocuments { snapshot, error in
guard let snapshot = snapshot, error == nil else {
completion(.failure(error ?? NSError(domain: "snapshot is nil", code: 107, userInfo: nil)))
return
}
let trips: [Trip]? = snapshot.documents.compactMap { doc in
var trip = try? doc.data(as: Trip.self)
if trip != nil {
trip!.id = doc.documentID
}
return trip
}
completion(.success(trips))
}
}
func addTrip(trip: Trip, completion: @escaping (Result<Trip?, Error>) -> Void) {
do {
var addedTrip = trip
addedTrip.userId = Auth.auth().currentUser?.uid
let reference = db.collection("trips").document()
let uid = reference.documentID
addedTrip.uid = uid
try reference.setData(from: addedTrip)
} catch {
fatalError("Unable to encode trip: \(error.localizedDescription)")
}
}
}
改变
var bol: String = ""
到
@Published var bol: String = ""
我正在开发一个使用 Xcode 12.4 的应用程序,它保存正确。现在我有了一台新电脑并升级到 Xcode 13.3.1 当我输入“123456”时它保存为“12345”如果我输入“1234567”然后在保存之前删除“7”它保存为“ 12345”。如果我输入“12345”或“1234567”然后点击保存,它就可以正常工作。
我不知道代码的哪一部分可能导致此问题或需要包含哪些其他信息。
我认为这是一个 Xcode 问题,而不是我的代码的问题。
我在保存按钮上有一个打印语句,但当时的代码是错误的。 “123456”打印为“12345”
struct AddTripView: View {
@Environment(\.presentationMode) var presentationMode
@StateObject private var addTripViewModel: AddTripViewModel
init(repo: RepositoryProtocol) {
_addTripViewModel = StateObject<AddTripViewModel>.init(wrappedValue: AddTripViewModel(repo: repo))
}
var body: some View {
Form {
HStack {
Text("BOL:").fontWeight(.bold)
TextField("BOL", text: $addTripViewModel.bol).keyboardType(.numberPad)
}
}
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button {
addTripViewModel.addTrip()
print("AddView \(addTripViewModel.bol)")
presentationMode.wrappedValue.dismiss()
} label: {
Text("Save")
}
}
}
}
}
class AddTripViewModel: ObservableObject {
private let repo: RepositoryProtocol
@Published var saved: Bool = false
var bol: String = ""
init(repo: RepositoryProtocol) {
self.repo = repo
}
func addTrip() {
let trip = Trip(uid: "",
bol: bol)
repo.addTrip(trip: trip) { result in
switch result {
case .success(let savedTrip):
DispatchQueue.main.async {
self.saved = savedTrip == nil ? false : true
}
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
class FirebaseRepository: RepositoryProtocol {
private let db = Firestore.firestore()
func getAllTrips(completion: @escaping (Result<[Trip]?, Error>) -> Void) {
let userId = Auth.auth().currentUser?.uid
db.collection("trips")
.whereField("userId", isEqualTo: userId!)
.getDocuments { snapshot, error in
guard let snapshot = snapshot, error == nil else {
completion(.failure(error ?? NSError(domain: "snapshot is nil", code: 107, userInfo: nil)))
return
}
let trips: [Trip]? = snapshot.documents.compactMap { doc in
var trip = try? doc.data(as: Trip.self)
if trip != nil {
trip!.id = doc.documentID
}
return trip
}
completion(.success(trips))
}
}
func addTrip(trip: Trip, completion: @escaping (Result<Trip?, Error>) -> Void) {
do {
var addedTrip = trip
addedTrip.userId = Auth.auth().currentUser?.uid
let reference = db.collection("trips").document()
let uid = reference.documentID
addedTrip.uid = uid
try reference.setData(from: addedTrip)
} catch {
fatalError("Unable to encode trip: \(error.localizedDescription)")
}
}
}
改变
var bol: String = ""
到
@Published var bol: String = ""