[英]"Unrecognized selector sent to instance" in unusual place, using a CoreData @NSManaged subclass
I'm trying to figure out why I'm getting this error "Unrecognized selector sent to instance" in the following scenario.我试图弄清楚为什么我会在以下场景中收到此错误“无法识别的选择器发送到实例”。 In my
Game
class, I have the following:在我的
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
}
}
In my ConferenceResultsTableViewController, I call loadGames() in my viewDidLoad() method.在我的 ConferenceResultsTableViewController 中,我在 viewDidLoad() 方法中调用了 loadGames()。
loadGames
is this: 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])
]
}
Conferences are a reference to which conferences the games belong to.会议是指游戏所属的会议。 Games belong to a conference if one of the participating teams is in that conference, so it's possible to have 1 or 2 conferences for each game.
如果其中一支参赛球队在该会议中,则游戏属于该会议,因此每场比赛可能有 1 或 2 个会议。 The commented out line above in
Game
's newGame() method was my first attempt at changing the input value from an array of Conference
s to an array of String
s.上面
Game
的 newGame() 方法中注释掉的行是我第一次尝试将输入值从Conference
数组更改为String
数组。 I started getting this error so I tried to do it manually with a for
loop, but the error didn't go away.我开始收到此错误,因此我尝试使用
for
循环手动执行此操作,但错误并未消失。 Here's the full logged error:这是完整记录的错误:
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
)
I'm not sure where to go from here.我不知道从这里去哪里。 It's got something to do with
setConferences
it looks like, but I don't have any method or selector with that name in my code, so I think it's got to be some attempt to set the conferences to the @NSManaged variable in Game.它看起来与
setConferences
,但我的代码中没有任何具有该名称的方法或选择器,因此我认为必须尝试将会议设置为 Game 中的 @NSManaged 变量。 I can't see how I'm doing it wrong though.我看不出我是怎么做错的。
Figured out my error.找出我的错误。 I had recently changed the attribute
conference
to conferences
in my Game
class, but forgot to change it in my data model in XCode.我最近在我的
Game
类中将属性conference
更改为conferences
,但忘记在 XCode 的数据模型中更改它。 For some reason, this didn't give a compiler error.出于某种原因,这并没有给出编译器错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.