在today widget里使用NSTimer,发生错误警报:error: memory read failed for 0x0
class TodayViewController: UIViewController, NCWidgetProviding {
var timer: NSTimer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view from its nib.
print("widget")
self.preferredContentSize = CGSizeMake(0,100);
timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: Selector(getBattery()), userInfo: nil, repeats: true)
}
func getBattery() {
print("level")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResult.Failed
// If there's no update required, use NCUpdateResult.NoData
// If there's an update, use NCUpdateResult.NewData
completionHandler(NCUpdateResult.NewData)
}
deinit {
timer.invalidate()
}
}
Mari kita meneka:
Deinit adalah bersamaan dengan dealloc Pemasa harus dialih keluar terlebih dahulu sebelum rujukan bulatnya sendiri dikeluarkan, dan kemudian deinit dipanggil. Saya rasa seperti ada sesuatu yang tidak kena di sini. Pada masa yang sesuai, jeda pemasa, dan kemudian tetapkan pemasa kepada sifar. Lihat jika ini berfungsi1 ralat: bacaan memori gagal untuk 0x0. 0x0 ialah objek yang dilepaskan. Idea umum ialah objek dilepaskan dan kemudian dipanggil, jadi ralat berlaku
2