2017-05-24 12 views
1

FileManager.default.setUbiquitous()を使用してアプリケーションのiCloud Driveフォルダにファイルを保存するSwiftでドキュメントベースのiOSアプリケーションを作成しています。今のところ、setUbiquitousが正常に実行されたかどうかを判断する方法が見つかりません(this投稿に記載されています)。FileManager.default.setUbiquitous()の結果を確認する方法

私はAppleのドキュメントを通過したところ、スウィフトはしばらく

setUbiquitous()のObjective-Cのバージョンは、Boolを返し、このメソッドはvoidを返すと示すためにスロー キーワードでマークされていることを述べていますそれは失敗の場合にエラーを投げます。

私はこの機能が正常に実行されたときに、私がアップロードされたドキュメントを考慮するために他のコードを実行できるように知りたい - 私はこれを行うに発見した最も近い道が言うた、機能の説明である:

ディスパッチキューを使用して、バックグラウンドスレッドからこのメソッドを呼び出します。 のメソッドが返された後、メインスレッドにメッセージの の残りの部分を更新するようメッセージします。

問題は、「あなたのアプリのデータ構造の残りの部分を更新するためにメインスレッドにメッセージを送る」という意味ではわかりません。これについてのどんな助けも大いに評価されるでしょう!

編集:これをさらに調べた後、私の主な問題は「メソッドが返された後...」というところです。メソッドが 'Void'だけを返す場合、残りのデータ構造を更新するまでどのように待つことができますか?

答えて

1

はここで一般的な考え方です:

DispatchQueue.global(qos: .background).async { 
    // This will run on a background Thread 

    let succeeded: Bool 
    try { 
     FileManager.default.setUbiquitous(...) 
     succeeded = true 
    } 
    catch { 
     // handle error 
     succeeded = false 
    } 

    DispatchQueue.main.async { 
     // This will run back on the main thread 
     reportResult(succeeded) 
    } 
} 
+0

ファイルの読み込みが行われる前に、これはまだ「reportResult()」関数を実行します。ファイルが保存されるまで、バックグラウンドスレッドの関数を一時停止する方法はありますか? – Grant

+0

@Grant Odd、私は 'setUbiquitous'は同期関数だと思いました。 – Alexander

関連する問題