Как отследить «нераспознанный селектор, отправленный экземпляру» в управляемом объекте Core Data - PullRequest
0 голосов
/ 24 июня 2018

Я получаю эту ошибку и несколько часов пытался выяснить причину:

[_ NSCoreDataTaggedObjectID FormulaName]: нераспознанный селектор отправлен в экземпляр 0xd0000000000c0008

Благодаря этой статье Я знаю, что _NSCoreDataTaggedObjectID - это имя класса объекта, для которого я вызываю метод (но это не один из моих классов), а formulaName - это метод вызывается или, я думаю, в моем случае это свойство .

У меня есть UITableViewController, который отображает LiftEvents на основе фильтра lift, который пользователь выбирает:

extension LiftEvent {
    @NSManaged var date: Date
    @NSManaged var repetitions: NSNumber
    @NSManaged var uuid: String
    @NSManaged var weightLifted: NSNumber
    @NSManaged var weightUnit: String
    @NSManaged var formula: Formula
    @NSManaged var lift: Lift
}

У каждого LiftEvent есть формула:

extension Formula {
    @NSManaged var formulaName: String
    @NSManaged var uuid: String
    @NSManaged var liftEvent: NSSet?
}

Поскольку каждая ячейка создается с помощью liftEvent, я вызываю liftEvent.calculateOneRepMax (), для которого требуется liftEvent.formula.formulaName:

 func calculateOneRepMax() -> Measurement<UnitMass> {
        var oneRepMax: Measurement<UnitMass>?
        let unit = liftWeight.unit
        let formulaName = formula.formulaName <-- Exception Breakpoint stops here
        switch formulaName {
        case "Baechle":
            let result = liftWeight * ( 1 + (0.033 * Double(truncating: repetitions)))
            oneRepMax = Measurement(value: result.value, unit: unit)

// the rest of the cases...

И в точке прерывания исключения есть формула, но я получаю нераспознанную ошибку селектора при попытке po self.formula.formulaName:

(lldb) po self.formula

0xd0000000000c000a <x-coredata://CEE4B747-4119-4372-B5A8-368D0AF9FB69/Formula/p3>

(lldb) po self.formula.formulaName

2018-06-24 09: 40: 36.174149-0700 Максимум 1 повторение [74577: 5375031] - [_ NSCoreDataTaggedObjectID FormulaName]: нераспознанный селектор, отправленный экземпляру 0xd0000000000c000a

ошибка: выполнение было прервано, причина: точка останова 1.1. Процесс был возвращен в состояние до вычисления выражения.

Если я выбираю разные lift фильтры , UIViewController фактически работает большую часть времени :

enter image description here

но в других случаях я выберу тот же lift фильтр, который работал минуту назад, но теперь вызывает сбой.

Я пытался отлаживать это часами. Я установил свою собственную точку останова повсюду и перешагивал код бесчисленное количество раз. Кто-нибудь есть какие-либо предложения о том, как еще я могу попробовать отладить это?

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