Ich versuche – performSelectorOnMainThread:withObject:waitUntilDone:
für eine Cocoa-Anwendung zu verwenden, die ich in Swift entwickle. Ich brauche die Anwendung, um zu warten, bis der Job erledigt ist. Wie auch immer, ich habe die folgenden Codezeilen.Swift - Using performSelectorOnMainThread
func recoverData(path:String) -> Void {
let sheetRect:NSRect = NSMakeRect(0,0,400,114)
let progSheet:NSWindow = NSWindow.init(contentRect:sheetRect, styleMask:NSTitledWindowMask,backing:NSBackingStoreType.Buffered,`defer`:true)
let contentView:NSView = NSView.init(frame:sheetRect)
let progInd:NSProgressIndicator = NSProgressIndicator.init(frame:NSMakeRect(190,74,20,20))
progInd.style = NSProgressIndicatorStyle.SpinningStyle
let msgLabel:NSTextField = NSTextField.init(frame:NSMakeRect(20,20,240,46))
msgLabel.stringValue = "Copying selected file..."
msgLabel.bezeled = false
msgLabel.drawsBackground = false
msgLabel.editable = false
msgLabel.selectable = false
contentView.addSubview(msgLabel)
contentView.addSubview(progInd)
progSheet.contentView = contentView
self.window.beginSheet(progSheet) {(NSModalResponse returnCode) -> Void in
progSheet.makeKeyAndOrderFront(self)
progInd.startAnimation(self)
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority,0)) {
//////////////////////////////////////////////////////////////////////////////////////////////////
self.performSelectorOnMainThread(Selector(self.readData(path)),withObject:path,waitUntilDone:true)
//////////////////////////////////////////////////////////////////////////////////////////////////
}
dispatch_async(dispatch_get_main_queue()) {
progInd.indeterminate = true
self.window.endSheet(progSheet)
progSheet.orderOut(self)
}
}
}
func readData(path:String) -> Void {
print("Hello!?")
}
Ich bin nicht sicher, wie ich path
zu readdata passieren. Xcode verlangt, dass ich das Argument auf etwas anderes als null oder nichts setze. In Objective-C wäre es
[self performSelectorOnMainThread:@selector(readData:) withObject:path waitUntilDone:YES];
Wie auch immer, die Anwendung erreicht nie readData. Was mache ich falsch?
Danke für Hilfe.
Wie, dass die Anwendung das Blatt schließen würde, wenn die Arbeit erledigt ist? Außerdem scheint die Anwendung sowieso readData nicht zu erreichen. –
Ich habe die Antwort bearbeitet – vadian
Auch die erste Zeile des geänderten Codes ist nicht gültig. –