私は、公開メソッドを持つRealmオブジェクト(LFEMemory)を持っています。ObjC Realmスレッディング問題
パブリッシュメソッドを呼び出すと、イメージをAWSにアップロードしてからAmazonで返されたURLでオブジェクトを更新する必要があります。
問題は、ブロックがAWSから返ってきたときに、自分の自己LFEMemoryオブジェクトがスレッドセーフではなくなったことです。 (実際は通常は通常のアプリの実行中ですが、App Extensionを使用している場合は決してありません)。
これを解決するには、realmオブジェクトからpublishメソッドを削除し、新しいスレッドで新しいレルムオブジェクトをフェッチできるコントローラオブジェクトでこれを処理します。しかし、それはブロックを呼び出すたびに新しい領域を作成する必要があることを意味します。これは確かに良い方法ではありません。
この状況をどのように処理するのですか?
- (void)publishWithBlock:(ResultBlock)block {
FileUploadManager *manager = [[FileUploadManager alloc] init];
[manager uploadWithSuccess:^(NSString *filename) {
//self is no longer thread-safe and will cause a crash
self.media.path = filename;
} failure:^(NSError *error) {
block(NO, error);
};
}