こんにちは
Swift初心者です。(長年、Microsoft Visual Basic5.0愛用してました)
選択したディレクトリ内の複数のファイルをそれぞれバイナリデータとして
1バイトずつ暗号化するcocoaアプリを作り、
暗号化の動作自体は問題なく出来てるのですが(なのでソフトしては使えてる)
途中経過として、今処理中のファイル名をラベルに表示したいのですが、
ラベルが更新されません。
調べたら、UIの更新はそもそもloop中はできないそうですが、
そうなるとディレクトリ内の複数のファイル名を順次どうやって表示するのか?
が、分からないでいます。
どなたか下記のコードでファイルの暗号化が1つ終わるごとに、
ラベルを更新できる方法を教えていただけないでしょうか?
まだ不慣れなので、実際のコードも全てボタンアクション内に記述してます
該当のソースコード
swift
1 2@IBAction func Start(_ sender: Any) { 3 4 let manager = FileManager() 5 let list = try manager.contentsOfDirectory(atPath: Path) 6 7 //ディレクトリ内のファイルを1つずつ処理 8 for i in stride(from: 0, to: list.count, by: 1) { 9 //入力ファイルの内容をバイナリデータとして読み込み 10 do { 11 let binaryData = try Data(contentsOf: URL, options: []) 12 } catch { 13 print("エラー") 14 } 15 //出力ファイルをオープン 16 let stream = OutputStream(url: OutputFileURL, append: false) 17 //今暗号化しているファイル名をラベルに表示・・・したい 18 Label.stringValue = list[i] 19 20 //バイナリデータを1バイトずつ暗号化 21 for i2 in stride(from: 0, to: filesize, by: 1) { 22 //ここに処理内容を記述してます。長いので割愛。 23 } 24 //終わったら開いたファイルへ出力 25 stream!.write(outputDat, maxLength: outputData.count) 26 } 27 }
試したこと
自分なりにこうすれば良いのかとラベル表示のコード部分を下記の様にやってみましたが
全然違う様でした。
DispatchQueue.main.async { Label.stringValue = list[i] }
補足情報(FW/ツールのバージョンなど)
Xcode 10 swift 4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/09 14:46