2016-04-25 72 views
0

我试图利用运动数据。我使用MotionKit Framework创建了一个测试应用程序。 print(testString)以一秒为间隔正确地将x变量打印到控制台。但我的testLabel不会更新一次。Swift/MotionKit.framework /如何更新标签

import UIKit 
import MotionKit 

class ViewController: UIViewController { 

@IBOutlet weak var testLabel: UILabel! 

let motionKit = MotionKit() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    motionKit.getAccelerometerValues(1.0) { (x, y, z) ->() in 
     let testString = String(x) 
     self.testLabel.text = testString 
     print(testString)    
    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 

我在想什么?非常感谢帮助。

回答

1

只是包装你的文本框的文本代码dispatch_async

dispatch_async(dispatch_get_main_queue(), ^{ 
     self.testLabel.text = testString 
    }); 
+0

谢谢。它做到了。你能解释我为什么吗?所以我不只是复制/粘贴,但理解它,请^^ –

+0

所有UI更新应该在MainThread上完成。您的motionKit.getAccelerometerValues在后台线程上运行,因此当您更新该线程上的标签时,它不会更新为UI,因此要更新主线程上的标签,必须将其包装在dispatch_async(dispatch_get_main_queue()主线程 –

+0

好吧谢谢你的努力:) –