FetchRequest Wrapped Value в SwiftUI: EXC_BAD_INSTRUCTION - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь выполнить простой запрос на выборку моего TrainingSessionHistory (объекта coredata) в одном из моих представлений SwiftUI, но получил Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

struct TrainingHistoryView: View {

var trainingSession  : TrainingSession

init(trainingSession : TrainingSession) {
    self.trainingSession = trainingSession

    let fetchRequest = FetchRequest(fetchRequest: TrainingSessionHistory.getBy(nb: 2, myTrainingSession: self.trainingSession))
    print(fetchRequest.wrappedValue) // -> crash this EXC_BAD_INSTRUCTION

}

TrainingSessionHistoryExtension: создание запроса на выборку

static func getBy(nb : Int, myTrainingSession : TrainingSession) -> NSFetchRequest<TrainingSessionHistory>{
    let request:NSFetchRequest<TrainingSessionHistory> = TrainingSessionHistory.fetchRequest() as!    NSFetchRequest<TrainingSessionHistory>

    //request.predicate = NSPredicate(format: "trainingSession == %@", myTrainingSession)
    request.fetchLimit = nb

    let sortDescriptor = NSSortDescriptor(key: "date", ascending: true)

    request.sortDescriptors = [sortDescriptor]

    return request
}

Я не понимаю, что случилось плохо в запросе:

po debug

Править : Fixing

Замена на

let req = TrainingSessionHistory.getBy(nb: 2, myTrainingSession: self.trainingSession)
        self.alternativeContext.performAndWait {
            do {
                let result = try req.execute()
                print(result)
            }catch {
                print(error)
            }
        }

, где alternativeContext определить в делегате выглядят так:

lazy var alternativeContext: NSManagedObjectContext = {
        let context = persistentContainer.newBackgroundContext()
        return context
}()

Благодаря { ссылка }

Все работают, но все еще не понимают, почему метод "FetchRequest.wrappedValue ()" не работает.

1 Ответ

0 голосов
/ 17 января 2020

У меня было такое же сообщение об ошибке. Оказывается, я не устанавливал идентификатор для NSManagedObject до его сохранения. Что за боль.

...