Я получаю ошибку 1570 Какао, потому что отношение var к родительской сущности приводит к отсутствию Core Data swift - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь сохранить в CoreData новую запись, но при попытке получить 1570 Cocoa error.В этой ошибке единственное, что я вижу nil, это user, то есть отношение user var к родительской сущности и два других атрибута, которые устанавливаются как необязательные в инспекторе свойств, поэтому они не требуются.Я не понимаю этого, потому что я выполняю выборку пользователя и проверяю, совпадает ли активный вход в систему с выбранным именем пользователя, и правильное ли значение. Возможно, что-то не видно из сообщения об ошибке.

Это функция:

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! // results nil and causes error when saving
                        booking.bookingId = bookingId
                        booking.bookingDate = bookingDate
                        booking.bookingStart = bookingStart
                        booking.bookingEnd = bookingEnd
                        booking.customerName = customerName
                        booking.bookingPrice = price
                        booking.worksList = workList

                        do {
                            try context.save()
                            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
                        do {
                            try context.save()
                            print("@@@@@@@@@@@@    New booking is saved")
                        } catch  {
                            print("@@@@@@@@@@@@@@    Error saving new booking")
                            print(error)
                        }
                    }
                }
            }
        } catch  {
            print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      Error in fetching a user")
        }
    }

, и это печать ошибки:

@@@@@@@@@@@@@@    Error saving new booking
Error Domain=NSCocoaErrorDomain Code=1560 "(null)" UserInfo={NSDetailedErrors=(
    "Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo={NSValidationErrorObject=<Booking: 0x6000006240f0> (entity: Booking; id: 0x600002501860 <x-coredata:///Booking/t0A133AFE-B419-4941-AADC-6C9AE234A8EF2> ; data: {\n    bookingDate = 20190405;\n    bookingEnd = \"15:30\";\n    bookingId = 201904051430;\n    bookingPrice = \"45.0\";\n    bookingStart = \"14:30\";\n    customerName = \"vincenzo calia\";\n    shopLogoUrl = nil;\n    shopName = nil;\n    user = nil;\n    worksList = \"Revisione Generale, \";\n}), NSValidationErrorKey=user, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.)}",
    "Error Domain=NSCocoaErrorDomain Code=1570 \"The operation couldn\U2019t be completed. (Cocoa error 1570.)\" UserInfo={NSValidationErrorObject=<Booking: 0x600000630190> (entity: Booking; id: 0x60000251b120 <x-coredata:///Booking/t0A133AFE-B419-4941-AADC-6C9AE234A8EF3> ; data: {\n    bookingDate = 20190405;\n    bookingEnd = \"18:30\";\n    bookingId = 201904051730;\n    bookingPrice = \"45.0\";\n    bookingStart = \"17:30\";\n    customerName = \"vincenzo calia\";\n    shopLogoUrl = nil;\n    shopName = nil;\n    user = nil;\n    worksList = \"Revisione Generale, \";\n}), NSValidationErrorKey=user, NSLocalizedDescription=The operation couldn\U2019t be completed. (Cocoa error 1570.)}"
)}

Вы можете определить, где проблема?Большое спасибо как обычно

1 Ответ

0 голосов
/ 07 апреля 2019

Мне не хватало добавить новую запись в родительский объект сущности перед сохранением контекста, и, очевидно, выдает ошибку, поэтому я просто добавил строку value.addToBookings(booking), и все это работает, как и ожидалось. На самом деле я мог бы вообще избежать указания значения для родительских отношений, так как фактически добавляю непосредственно через родительскую функцию. Надеюсь, что это поможет другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...