2016-08-04 7 views
0

iOS documentation状態を実行するときに使用する:スウィフト "実行ブロック操作" で、次のブロックの操作

FUNC performBlockAndWait(_ブロック:() - >ボイド) は、あなたが使用

ディスカッションこのメソッドは、NSPrivateQueueConcurrencyTypeまたはNSMainQueueConcurrencyTypeを使用してコンテキストが初期化された場合に、管理対象オブジェクトにメッセージを送信します。


しかし、どのような「ブロック操作の実行」使用は常にコアデータで、Appleのドキュメントの例を私はしませ混乱させる。

Saving Managed Objectets:

do { 
    try managedObjectContext.save() 
} catch { 
    fatalError("Failure to save context: \(error)") 
} 

Fetching Managed Objects

let moc = managedObjectContext 
let employeesFetch = NSFetchRequest(entityName: "Employee") 

do { 
    let fetchedEmployees = try moc.executeFetchRequest(employeesFetch) 
    as! [AAAEmployeeMO] 
} catch { 
    fatalError("Failed to fetch employees: \(error)") 
} 

私は思ったんだけどは、ブロック操作を実行するために使用する場合、あります。マネージド・オブジェクト・コンテキストを使用して作業する場合は、常にそれらを使用することをお薦めします。そして、Appleがそれらのサンプルコードで常にそれらを使用している理由は何か。ここでは(core data api reference)、ここでは使用しません(core data programming guide)。

答えて

1

あなたはAPIドキュメントのこの部分を逃した:

https://developer.apple.com/reference/coredata/nsmanagedobjectcontext

2つの例外があります:あなたのコードは、メインスレッド上で実行されている場合は

...

は、ブロック のAPIを使用する代わりに、メインキュースタイルのコンテキストでメソッド を直接呼び出すことができます。

+0

申し訳ありませんが、私はそれをお見逃しなく。私の質問をもっとはっきりと述べたかもしれません。 "NSPrivateQueueConcurrencyTypeまたはNSMainQueueConcurrencyTypeを使用してコンテキストが初期化された場合、このメソッドを使用して管理対象オブジェクトにメッセージを送信します。 これは、例外に関係なく、これらを常に使用することを提案します。私はベストプラクティスが何であるかさらに疑問に思っています。リンゴの文書化はこれと一貫していないので。 – BARJ

+0

私はあなたのこのことを理解していません。例外は非常に明示的ですが、一般規則の言語は中立で、強い言語はまったくありません。一般的に(バックグラウンドスレッドでコアデータ操作をしていることが多いため)、performAndWaitを使用する必要があります。スレッドについての推論からも明らかです。彼らが設定しようとしているものと同じスレッドから呼び出されたとき、MoCのメソッド呼び出しは*すでに*同期しています。 'performAndWait'は冗長です。 – BaseZen

関連する問題