1
Swiftで開発しているCocoaアプリケーションに– performSelectorOnMainThread:withObject:waitUntilDone:
を使用しようとしています。私は、仕事が完了するまで待つようにアプリケーションが必要です。とにかく、次のコード行があります。Swift - 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!?")
}
私はどのようにreadDataにpath
を渡すのか分かりません。 Xcodeでは、引数をnil以外のものに設定する必要があります。 Objective-Cでは、
[self performSelectorOnMainThread:@selector(readData:) withObject:path waitUntilDone:YES];
とにかく、アプリケーションはreadDataに到達しません。私は間違って何をしていますか?
ありがとうございました。
のようなものを意味すると思いますか?また、アプリケーションはreadDataに到達していないようです。 –
私は答えを編集しました – vadian
修正されたコードの最初の行でさえ無効です。 –