저는 Swift (2.2)의 신참이며 Xcode 7.3 및 OS X 10.11을 사용하는 간단한 응용 프로그램에 문제가 있습니다. 이 응용 프로그램에서는 사용자가 버튼을 클릭하고 NSOpenPanel을 통해 파일을 선택합니다. 코드는 선택한 URL을 사용하여 파일의 데이터와 이름을 가져온 다음 데이터를 처리하고 그 결과를 다른 위치에 저장합니다. 대용량 파일의 경우 처리하는 데 몇 초가 걸릴 수 있습니다. 대용량 파일을 처리 할 때 파일을 선택하면 열린 파일 창이 비어 있던 공간이 비워져서 응용 프로그램보기와 그 밖의 모든 항목을 덮고 작업이 완료 될 때까지 그대로 있습니다. 또한 작업이 끝날 때까지 앱의 아웃렛이 고정됩니다. 그것은 NSOpenPanel 다시 응용 프로그램 및 시스템 창 제어를 넘겨 나타납니다 나타납니다.Swift 기능 중에는 NSOpenPanel이 제대로 닫히지 않습니다.
코드는 다음과 같이 진행됩니다
@IBAction func processFile(sender: AnyObject) {
var chosenURL: NSURL?
let openPanel = NSOpenPanel()
openPanel.title = "Choose a file"
openPanel.canChooseDirectories = false
openPanel.allowsMultipleSelection = false
if openPanel.runModal() == NSFileHandlingPanelOKButton {
chosenURL = openPanel.URL
}
let dataBytes = NSData(contentsOfURL: chosenURL!)
let fileName = chosenURL!.lastPathCompnent!
// Remaining code processes dataBytes and fileName
나는 몇 가지 변화를 시도했지만 같은 결과를 얻을했습니다. "NSOpenPanel이 닫히지 않을 것입니다"를 검색하면 일반적으로 Objective-C에 예제가 표시됩니다. NSOpenPanel을 종료하고 뷰와 컨트롤을 응용 프로그램 창으로 반환하는 방법에 대한 제안 사항은 무엇입니까?
NSData (contentsOfURL : selectedURL!) 이것은 UI를 차단하는 것입니다. 백그라운드에서 데이터를 가져와야합니다. – Moritz
그게 무슨 뜻인지 모르겠습니다. GCD와 관련이 있습니까? – Micos