«Нераспознанный селектор отправлен в экземпляр» в необычном месте с использованием подкласса CoreData @NSManaged - PullRequest
1 голос
/ 09 июля 2019

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

import Foundation
import CoreData

class Game: NSManagedObject {

    @NSManaged var contestants: [String]
    @NSManaged var winner: String
    @NSManaged var confidence: Int
    @NSManaged var conferences: [String]

}

extension Game {

    public static func newGame(context: NSManagedObjectContext, contestants: [String]?, winner: String?, confidence: Int?, conferences: [Conference]?) -> Game {

        let newGame = Game(context: context)

        if let contestants = contestants {
            newGame.contestants = contestants
        } else {
            newGame.contestants = ["", ""]
        }
        if let winner = winner {
            newGame.winner = winner
        } else {
            newGame.winner = ""
        }
        if let confidence = confidence {
            newGame.confidence = confidence
        } else {
            newGame.confidence = 0
        }
        if let conferences = conferences {
            var conferencesStrArray = [String]()
            for conference in conferences {
                conferencesStrArray.append(Conference.getStringValue(conference: conference))
            }
            newGame.conferences = conferencesStrArray
//            newGame.conferences = conferences.map({ Conference.getStringValue(conference: $0) })
        } else {
            newGame.conferences = ["CAA"]
        }

        return newGame

    }

}

В моем ConferenceResultsTableViewController я вызываю loadGames () в моем методе viewDidLoad ().loadGames это:

private func loadGames() {

        os_log("loadGames() called", log: OSLog.default, type: .debug)
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            return
        }
        let managedContext = appDelegate.persistentContainer.viewContext
        self.allGames = [
            Game.newGame(context: managedContext, contestants: ["Elon", "JMU"], winner: "Elon", confidence: 55, conferences: [.caa]),
            Game.newGame(context: managedContext, contestants: ["Elon", "Wake Forest"], winner: "Wake Forest", confidence: 65, conferences: [.caa]),
            Game.newGame(context: managedContext, contestants: ["Elon", "The Citadel"], winner: "Elon", confidence: 60, conferences: [.caa, .southern])
        ]

    }

Конференции - это ссылки, к которым относятся игры.Игры принадлежат конференции, если в ней участвует одна из участвующих команд, поэтому для каждой игры можно провести 1 или 2 конференции.Закомментированная строка выше в методе newGame () Game была моей первой попыткой изменить входное значение с массива Conference s на массив String s.Я начал получать эту ошибку, поэтому я попытался сделать это вручную с помощью цикла for, но ошибка не исчезла.Вот полная зарегистрированная ошибка:

2019-07-08 19:43:55.147053-0400 FCS Mock Season Creator[55255:6599033] -[FCS_Mock_Season_Creator.Game setConferences:]: unrecognized selector sent to instance 0x6000028aabc0
2019-07-08 19:43:55.151696-0400 FCS Mock Season Creator[55255:6599033] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FCS_Mock_Season_Creator.Game setConferences:]: unrecognized selector sent to instance 0x6000028aabc0'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000108c856fb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x0000000106c9aac5 objc_exception_throw + 48
    2   CoreFoundation                      0x0000000108ca3ab4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   CoreFoundation                      0x0000000108c8a443 ___forwarding___ + 1443
    4   CoreFoundation                      0x0000000108c8c238 _CF_forwarding_prep_0 + 120
    5   FCS Mock Season Creator             0x0000000106396bed $s23FCS_Mock_Season_Creator4GameC03newE07context11contestants6winner10confidence11conferencesACSo22NSManagedObjectContextC_SaySSGSgSSSgSiSgSayAA10ConferenceOGSgtFZ + 2013
    6   FCS Mock Season Creator             0x000000010639b00d $s23FCS_Mock_Season_Creator36ConferenceResultsTableViewControllerC9loadGames33_D4BAFF1647E02D408B56C0798C167D1BLLyyF + 893
    7   FCS Mock Season Creator             0x0000000106399c54 $s23FCS_Mock_Season_Creator36ConferenceResultsTableViewControllerC11viewDidLoadyyF + 132
    8   FCS Mock Season Creator             0x0000000106399db4 $s23FCS_Mock_Season_Creator36ConferenceResultsTableViewControllerC11viewDidLoadyyFTo + 36
    9   UIKitCore                           0x000000010b01f43b -[UIViewController loadViewIfRequired] + 1183
    10  UIKitCore                           0x000000010b01f868 -[UIViewController view] + 27
    11  UIKitCore                           0x000000010af6e3d0 -[UINavigationController _startCustomTransition:] + 929
    12  UIKitCore                           0x000000010af8431a -[UINavigationController _startDeferredTransitionIfNeeded:] + 741
    13  UIKitCore                           0x000000010af856a7 -[UINavigationController __viewWillLayoutSubviews] + 150
    14  UIKitCore                           0x000000010af6638d -[UILayoutContainerView layoutSubviews] + 217
    15  UIKitCore                           0x000000010baef9c1 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1417
    16  QuartzCore                          0x000000010d060eae -[CALayer layoutSublayers] + 173
    17  QuartzCore                          0x000000010d065b88 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 396
    18  QuartzCore                          0x000000010d071ee4 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 72
    19  QuartzCore                          0x000000010cfe13aa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 328
    20  QuartzCore                          0x000000010d018584 _ZN2CA11Transaction6commitEv + 608
    21  UIKitCore                           0x000000010b6493a4 _afterCACommitHandler + 245
    22  CoreFoundation                      0x0000000108bec0f7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    23  CoreFoundation                      0x0000000108be65be __CFRunLoopDoObservers + 430
    24  CoreFoundation                      0x0000000108be6c31 __CFRunLoopRun + 1505
    25  CoreFoundation                      0x0000000108be6302 CFRunLoopRunSpecific + 626
    26  GraphicsServices                    0x0000000110d7f2fe GSEventRunModal + 65
    27  UIKitCore                           0x000000010b621ba2 UIApplicationMain + 140
    28  FCS Mock Season Creator             0x000000010639897b main + 75
    29  libdyld.dylib                       0x000000010a1a8541 start + 1
)

Я не уверен, куда идти отсюда.Это как-то связано с setConferences, похоже, но у меня нет кода или селектора с таким именем в моем коде, поэтому я думаю, что это должна быть попытка установить для конференций переменную @NSManaged в Game,Хотя я не понимаю, как я делаю это неправильно.

1 Ответ

1 голос
/ 09 июля 2019

разобрался с моей ошибкой. Недавно я изменил атрибут conference на conferences в своем классе Game, но забыл изменить его в моей модели данных в XCode. По какой-то причине это не дало ошибку компилятора.

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