私は時間とバッテリーのレベルを表示するだけの簡単なアプリを開発中です。時間の部分は完璧に動作し、私はバッテリーのレベルを監視することができますが、デバイスのバッテリーに変更があると、バッテリーインジケーターアイコンがアプリケーションをクラッシュさせます。ここでは、関連するコードがあります:バッテリー残量が変わると未知のNSExceptionが発生する
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.current.isBatteryMonitoringEnabled = true // Enable battery monitoring
NotificationCenter.default.addObserver(self, selector: Selector(("batteryStateDidChange:")), name: NSNotification.Name.UIDeviceBatteryStateDidChange, object: nil) // Add battery state checker
NotificationCenter.default.addObserver(self, selector: Selector(("batteryLevelDidChange:")), name: NSNotification.Name.UIDeviceBatteryLevelDidChange, object: nil) // Add battery level checker
// Get the battery level
var batteryLevel: Int {
return Int(UIDevice.current.batteryLevel * 100)
}
update()
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.update), userInfo: nil, repeats: true) // Start the timed scheduler
}
ここでエラーです:
2017-06-24 11:45:27.783761-0500 SimpleClock[1484:846193] -[SimpleClock.ViewController batteryLevelDidChange:]: unrecognized selector sent to instance 0x15dd15bc0
2017-06-24 11:45:27.785656-0500 SimpleClock[1484:846193] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SimpleClock.ViewController batteryLevelDidChange:]: unrecognized selector sent to instance 0x15dd15bc0'
*** First throw call stack:
(0x181c65858 0x18043c528 0x181c72a6c 0x188815140 0x181c6af68 0x181b4ce5c 0x181bf3004 0x181bf25a4 0x181bf2308 0x181c74268 0x181b2a4e4 0x1826f32d4 0x1884abd60 0x1884abbc8 0x181ecdaf0 0x181beda68 0x181c0cbc8 0x181c0c370 0x181c09d80 0x181b28280 0x183639f94 0x1884d70f0 0x100da10e4 0x180919e40)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
コードへのリンクを投稿しないでください。あなたの質問を関連コードでテキストとして[編集]します。 – rmaddy
エラーメッセージ* batteryLevelDidChange:]:認識できないセレクタ... *はかなり明確です。メソッドが見つからないか、シグネチャが間違っています。 – vadian
PS:Swiftの '#selector'ネイティブ構文を使用します。利点は、コンパイル時にエラーが発生することです。 – vadian