У меня есть эта функция, которая вызывается firebase .childAdded observer
, и я пытаюсь проверить, находится ли запись для записи в базе данных, прежде чем она записывает ее. Это связано с тем, что когда пользователь входит в систему, все входящие моментальные снимки вызывают многократную запись в базу данных.
Я пытаюсь выполнить проверку с помощью .contains
bool против записи, если это произойдет, то функция должна вернуться, иначе она будет продолжать и записывать новую запись, но не работает, при каждом входе в систему она будет добавлять все входящие снимки. Что я должен сделать вместо этого? Большое спасибо как всегда.
Это функция:
static func saveBooking(bookingId: String, bookingDate: String, bookingStart: String, bookingEnd: String, customerName: String, price: String, workList: String) throws {
let context = CoreData.databaseContext
let request: NSFetchRequest<User> = User.fetchRequest()
do {
let fetch = try context.fetch(request)
print("@@@@@@@@@@@@@@@@@@ fetching user")
for value in fetch {
if value.name == UserDetails.fullName {
print("User is: \(value.name!)") //correct
if #available(iOS 10.0, *) {
let booking = Booking(context: context)
booking.user?.name = value.name!
booking.bookingId = bookingId
booking.bookingDate = bookingDate
booking.bookingStart = bookingStart
booking.bookingEnd = bookingEnd
booking.customerName = customerName
booking.bookingPrice = price
booking.worksList = workList
if value.bookings!.contains(booking){
print("@@@@@@@@@ found existing record for this booking! ")
return
} else {
value.addToBookings(booking)
print("@@@@@@@@@@@@@@@@@@@@@@@@@ booking user at propertis value attribution is : \(String(describing: booking.user!.name!))")
do {
try context.save()
print("@@@@@@@@@@@@@@@@@@@@@@@@@ booking user after saving booking is : \(String(describing: booking.user!.name!))")
print("@@@@@@@@@@@@ New booking is saved")
} catch {
print("@@@@@@@@@@@@@@ Error saving new booking")
print(error)
}
}
} else {
// Fallback on earlier versions
let entityDescription = NSEntityDescription.entity(forEntityName: "Booking", in: context)
let booking = Booking(entity: entityDescription!, insertInto: context)
booking.user?.name = value.name
booking.bookingId = bookingId
booking.bookingDate = bookingDate
booking.bookingStart = bookingStart
booking.bookingEnd = bookingEnd
booking.customerName = customerName
booking.bookingPrice = price
booking.worksList = workList
if value.bookings!.contains(booking) {
print("@@@@@@@@@ found existing record for this booking! ")
return
} else {
value.addToBookings(booking)
do {
try context.save()
print("@@@@@@@@@@@@ New booking is saved")
} catch {
print("@@@@@@@@@@@@@@ Error saving new booking")
print(error)
}
}
}
}
}
} catch {
print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Error in fetching a user")
}
}