Swift:文本标签未更新

Swift:文本标签未更新,swift,macos,label,appdelegate,Swift,Macos,Label,Appdelegate,我有一个文本标签(NSTextField)。我希望它固定到每个对象的左上角顶点,以在UI中显示元素的编号。 但是我的标签只显示零并且不移动(它停留在左上角)。我做错了什么 以下是我在AppDelegate.swift中的代码: import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! @IBOutlet w

我有一个文本标签(NSTextField)。我希望它固定到每个对象的左上角顶点,以在UI中显示元素的编号。 但是我的标签只显示零并且不移动(它停留在左上角)。我做错了什么

以下是我在AppDelegate.swift中的代码:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {


@IBOutlet weak var window: NSWindow!
@IBOutlet weak var drawingView: DrawingView!
@IBOutlet weak var label: NSTextField!


var localArray: [CGPoint] = []

func applicationDidFinishLaunching(aNotification: NSNotification) {

    label.textColor = NSColor(calibratedRed: 0.15, green: 0, blue: 0.75, alpha: 0.3)
    label.font! = NSFont(name: "Arial Bold", size: 60)!
    label.backgroundColor = NSColor.clearColor()
    label.stringValue = "\(localArray.count/4)"

    for (pointIndex, _) in localArray.enumerate() {

        let point = CGPoint(x: (localArray[(pointIndex/4)+1].x), y: (localArray[(pointIndex/4)+1].y))

        label.sizeToFit()
        label.frame = CGRect(origin: point, size: CGSize(width: label.bounds.width, height: label.bounds.height))
    }
}
这是我在DrawingView.swift中的代码:

   var delegate = NSApplication.sharedApplication().delegate as! AppDelegate
   delegate.localArray = myArray.map { return $0.coordSequence()[0] }
myArray包含cgpoints


我是否正确地将标签参数放在ApplicationIDFinishLaunching方法中?

您试图更新NSTextField的线程可能错误

dispatch_async(dispatch_get_main_queue(),{
     label.stringValue = "\((localArray.count/4)+1)"
})

尝试调查您的数组时,我可以假设当您设置标签
localArray.count的值时,
为0。另外请记住,您使用的是
Int
,如果
localArray.count
是3,那么3/4将是0。

dispatch\u async(dispatch\u get\u main\u queue(),{self.label.stringValue=“(self.localArray.count/4)”,如果我将dispatch\u async(dispatch\u get\u main\u queue(),{self.label.stringValue=”((self.localArray.count))“}),结果是一样的。您能简单地打印self.localArray.count并注意它是否大于0吗?我想文本标签不会因为ApplicationIDFinishLaunching方法而更新。看起来,我的标签需要另一种方法,但我不知道什么方法适合这种情况。请尝试使用此方法