在以下情况下,我试图弄清楚为什么出现此错误“无法识别的选择器发送到实例”。在我的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中,我在viewDidLoad()方法中调用loadGames()。 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个会议。 Game
的newGame()方法中上面注释掉的行是我第一次尝试将输入值从Conference
数组更改为String
数组。我开始收到此错误,因此尝试通过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变量在游戏中。我看不到我怎么做错了。
答案 0 :(得分:1)
找出我的错误。我最近在from skimage.feature import peak_local_max
coordinates = peak_local_max(scmax, min_distance=5)
类中将属性conference
更改为conferences
,但是忘记了在XCode的数据模型中对其进行更改。出于某种原因,这不会导致编译器错误。