我试图在我的 View 出现之前调用 HealthKit 授权函数,但它在 View 加载后一直出现,这不是我想要的。我也收到此错误:
Unbalanced calls to begin/end appearance transitions for .
(我假设错误告诉我我做的是错的,我知道这一点。)
问题
我究竟应该如何调用此函数才能使 HealthKit 授权对话框在加载之前覆盖 View Controller 的 View ?
class SummaryViewController: UIViewController {
//MARK: Properties
@IBOutlet weak var chart: CounterView!
@IBOutlet weak var scoreLabel: UILabel!
@IBOutlet weak var pieChart: CounterView!
@IBOutlet weak var dateLabel: UILabel!
var healthData = HealthData()
let counterView = CounterView()
var scoreInt = 0
let yesterday = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -1, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))
func formatDate(date:NSDate) -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
let dateString = dateFormatter.stringFromDate(date)
return dateString
}
override func viewWillAppear(animated: Bool) {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
func healthKitAuth() {
HealthData().authorizeHealthKit { (authorized, error) -> Void in
if authorized {
print("HealthKit authorization received.")
self.healthData.updateHealthCharacteristics()
let seconds = 0.1
let delay = seconds * Double(NSEC_PER_SEC) // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
self.scoreInt = Int(self.healthData.score)
self.scoreLabel.text = String(self.scoreInt)
self.counterView.counter = self.scoreInt
self.pieChart.counter = self.counterView.counter
let dateString = self.formatDate(self.yesterday!)
self.dateLabel.text = String(dateString)
})
}
else
{
print("HealthKit authorization denied!")
if error != nil {
print("\(error)")
}
}
}
}
healthKitAuth()
}
}
最佳答案
您收到的警告是因为您在转换过程中调用转换。您不应尝试在 viewWillAppear
方法中显示 View Controller 。 (authorizeHealthKit
函数提供了一个 View Controller ...)
至于你想要什么......你需要在 View Controller 加载之前调用 authorizeHealthKit
函数。为此,您可能需要创建一个新的 View Controller ,该 Controller 除了检查 HealthKit 授权之外什么都不做,然后加载您的 View Controller 。
关于ios - 使用 View Controller 中的方法调用模态视图,该 View 在加载之前覆盖该 View Controller 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907164/