Ошибка «Неопознанный селектор отправлен в экземпляр» при вызове allObjects в NSSet - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь загрузить сущности в свой контроллер представления, используя базовые данные, но при попытке сделать это я получаю сообщение об ошибке «нераспознанный селектор отправлен в экземпляр». У меня есть две сущности: Рутина и Упражнение, когда Рутина является владельцем Упражнения.

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

let exercises = routine.exercises.allObjects as! [Exercise]

Однако эта строка выдает мне ошибку. Я довольно новичок в использовании CoreData, поэтому я немного озадачен тем, откуда появилась эта ошибка. Мои два класса:

@objc(Exercise)
public class Exercise: NSManagedObject {

}
extension Exercise {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Exercise> {
        return NSFetchRequest<Exercise>(entityName: "Exercise")
    }

    @NSManaged public var name: String?
    @NSManaged public var reps: Int16
    @NSManaged public var sets: Int16
    @NSManaged public var owner: Routine

}
@objc(Routine)
public class Routine: NSManagedObject {

}
extension Routine {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Routine> {
        return NSFetchRequest<Routine>(entityName: "Routine")
    }

    @NSManaged public var name: String?
    @NSManaged public var exercises: NSSet

}

Я пытался просмотреть разные вопросы о переполнении стека, но не смог найти ничего, что решило бы ошибку, спасибо.

EDIT вывод на печать (рутинные упражнения)

<Exercise: 0x600001591e00> (entity: Exercise; id: 0xe28fa998e4a16a04 <x-coredata://024220B5-49D9-4D66-B7CB-ADE11BEB9F85/Exercise/p12> ; data: { name = "Incline Bench Press"; owner = "0xe28fa998e4b16a06 <x-coredata://024220B5-49D9-4D66-B7CB-ADE11BEB9F85/Routine/p8>"; reps = 0; sets = 4; })

пока сообщение об ошибке:

2019-04-17 13:23:09.069636+0100 MyFitnessApp[6564:25418954] -[Exercise allObjects]: unrecognized selector sent to instance 0x600001591e00
2019-04-17 13:23:09.075932+0100 MyFitnessApp[6564:25418954] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Exercise allObjects]: unrecognized selector sent to instance 0x600001591e00'

1 Ответ

1 голос
/ 17 апреля 2019

В сообщении об ошибке в основном говорится, что exercises содержит экземпляр Exercise, а не экземпляр NSSet.

Недостаточно обновить тип свойства, действительно важная часть - обновить модель данных, которая должна быть отражением определений в коде.

В этом случае вам следует изменить exercises в вашей модели с отношения один-к-одному на отношение один-ко-многим. Потребуется миграция (или очистка модели данных).

Поскольку присваивание свойств выполняется в Objective-C динамически, без надлежащего контроля типов, может случиться, что свойство, объявленное с типом NSSet, на самом деле содержит экземпляр Exercise.

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