問題タブ [nsfileversion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
icloud - URL が NSURLUbiquitousItemHasUnresolvedConflictsKey に対して true を報告しているが、他のバージョンの URL がない場合、それはどういう意味ですか?
競合をテストするために、同じドキュメントの 2 つの異なるバージョンを 2 つのデバイスに保存しました。両方のデバイスでcurrentVersionOfItemAtURL
、「勝者」のバージョン (両方のデバイスで同じ) を確認し、otherVersionsOfItemAtURL
またはremoveOtherVersionsOfItemAtURL
を見て、他のバージョンを確認することができます。
currentVersionOfItemAtURL
しかし、私は今、2 つのデバイスで が異なり、otherVersionsOfItemAtURL
またはが存在しない、奇妙な状態のドキュメントを取得したようですremoveOtherVersionsOfItemAtURL
。getResourceValue:forKey:
withを使用するNSURLUbiquitousItemHasUnresolvedConflictsKey
と、URL に未解決の競合があることが報告されますが、それらを確認する方法はありません。
URL が NSURLUbiquitousItemHasUnresolvedConflictsKey に対して true を報告しているが、他のバージョンの URL がない場合、それはどういう意味ですか? これは本番アプリで処理する必要があるケースですか?
cocoa - 競合する NSFileVersion を自動的に作成する
競合する NSFileVersion のバージョンを解決するために自動的に起動する、独自の競合処理ルーチンを作成しました。今、それが機能することを確認するために、単体テストを書きたいと思います。質問は次のとおりです。
単体テスト内で競合するバージョンを作成/作成するにはどうすればよいですか?
この要点は次のとおりです。iCloud を介して手動で行わずに競合を引き起こすにはどうすればよいですか? これはテストのみを目的としているため、プライベート API を使用したり、システムに直接ハッキングしたりすることは気にしません - 結果が から報告された競合である限りNSFileVersion's +unresolvedConflictVersionsOfItemAtURL
。どんなアドバイスでも大歓迎です!
マックス
cocoa-touch - メソッドremoveAndReturnError:は必要ありませんか?
iCloudでのUIDocumentsとの競合解決に関するドキュメントを読みました: ドキュメントバージョンの競合の解決
「ドキュメントバージョンの競合が解決されたことをiOSに伝える方法」の章の最後のポイントには、次のように書かれています。
ドキュメントの解決されたバージョンを削除します。不要になったバージョンについては、NSFileVersionのremoveAndReturnError:メソッドを呼び出して、ファイルのストレージを再利用します。ドキュメントのリビジョンは、削除するまでサーバーに残ります。
ただし、コードサンプル「リスト6-3」には、removeAndReturnError:メソッドが呼び出されていません。このメソッドは必要ありませんか、それともどこで呼び出す必要がありますか?
助けてくれてありがとう
リナード
icloud - iCloud: ファイル パッケージの 2 つのバージョンをマージする戦略 (共通の祖先)?
私はドキュメント ベースのアプリ (Mac & iOS) を持っており、ユーザーを煩わすことなくバージョンの競合を自動的に解決する良い方法を見つけようとしています。
私のドキュメントは、実際には、テキスト ファイルとして保存された小さなメモがたくさんあるファイル パッケージです。バージョンの競合の最も可能性の高いシナリオは、ユーザーが各デバイスで異なるメモを変更したため、それぞれの最新のものを選択するだけでそれらをマージできるはずです.
ただし、NSFileVersion を使用すると、現在の (最新の)バージョンと競合するバージョンしか取得できませんが、変更を失うことなくメモを使用できることを知るには、共通の祖先の変更日を知る必要があります。
フロー例:
上記に基づいて、クライアント 2 のバージョンは最新になります。これは、note2.txt が最新の保存操作であったためです。
上記の場合、クライアント 2 が行った変更 ("foo") が失われてしまうため、note1.txt の最新バージョンを単純にマージすることはできません。最初にクライアント 2 の note1.txt を見て、それが共通の祖先 (「ベース」) と比較して変更されているかどうかを確認する必要があります。
シンプルでエレガントなソリューションですが、NSFileVersion
何かが欠けていない限り、これだけではできないと思います。
別の方法として、何らかのタイムスタンプ付きのトランザクション ログを使用することもできますが、これはかなり複雑になります...
objective-c - NSFileVersion: ファイルをコピーして競合を解決する
Documents フォルダー全体に NSFilePresenter があります。以前はファイルを iCloud コンテナに入れていましたが、ファイルが複数のデバイスで同時に作成された場合、iCloud によって自動的に名前が変更されました。同時に、presentedSubitemAtURL:(didMoveToURL:
特定のデバイスで作成された特定のファイルの名前が変更されたことを通知します。ファイルが iCloud によって自動的に移動されていることを知る唯一の方法であるため、これは重要です。
- (void)presentedSubitemAtURL:(NSURL *)url didGainVersion:(NSFileVersion *)version
ただし、 iCloud でファイルの名前を変更するだけではなく、インプレースで書き込みたい場合もあるため、競合を自分で解決して実装するようになりました。
iCloud と同じ方法で、同じファイルの競合するバージョンを 2 つのファイルに分ける適切な方法は何ですか? したがって、両方のデバイスがfile.txt
同時に書き込みを行った場合、ファイルの 1 つを に移動する必要がありますfile 2.txt
。
これまでのところ、ファイルの最新バージョンを取得する解決策があります。