Я пытаюсь выяснить, почему я получаю эту ошибку «Нераспознанный селектор отправлен в экземпляр» в следующем сценарии.В моем классе 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,Хотя я не понимаю, как я делаю это неправильно.