質問

現在、サンドボックスに登録されているアプリを開発しています。基本的なテキストエディターとして機能します。最近、アプリと別のアプリでファイルを同時に開いたときに何が起こるかをテストし、1つのアプリで更新してから、もう1つのアプリで更新されたものを確認したいと思いました。私は使用しています Coda また BBEdit 私の代替編集者として。サンドボックスをオフにすると、この問題は存在しません。ただし、3月1日の時点でアプリをサンドボックス化する必要があるため、待機して見るのではなく、解決策を実装したいと思います。

両方のファイルを開き、アプリで編集してから他のアプリに切り替えると、変更が反映されているため、これらのエディターが私のアプリから保存されたバージョンを持っています。しかし、私が彼らのアプリから保存してから私のものに移動するという逆を実行する場合、喜びはありません。アクションを実行せずに、コンソールは2つの特定のエラーを報告します。 deny file-issue-extensiondeny file-write-data. 。アプリは、ドキュメントがアプリで開かれた後に外部エディターによって変更されたため、ドキュメントを編集するための特権を失っているようです。アプリにファイルを保存しようとすると、元のドキュメントへのアクセスが失敗したため、ドキュメントを複製するように求められます。これらのアプリはサンドボックスされていないため、これは逆には起こりません。そのため、私のアプリにはそうでない許可があります。また、この動作を望まない場合、他のアプリが変更を加えるのを防ぐことができるとは思われません。

Developer.Apple.comのドキュメントは、このタイプの状況について何も言及していません。これが意図された動作であるかどうかはわかりません。もしそうなら、ドキュメントの権限が失われ、新しいバージョンを保存するか、ファイルを再開する必要があることをユーザーに伝えることができます。動作が意図されていない場合、NSDocument APIのどのような方法がファイルが失われたら許可を与えますか?私は答えが前者であると仮定しています、これは意図されていますが、誰でも確認できますか、ドキュメントはありますか?

役に立ちましたか?

解決

アクションを実行することなく、コンソールは2つの特定のエラーを報告します。ファイル発行拡張を拒否し、ファイルワイトデータを拒否します。アプリは、ドキュメントがアプリで開かれた後に外部エディターによって変更されたため、ドキュメントを編集するための特権を失っているようです。アプリにファイルを保存しようとすると、元のドキュメントへのアクセスが失われたため、ドキュメントを複製するように求められます

このような状況での正しい動作は、ファイルを上書きせずに、ドキュメントをリロードしたい場合にユーザーに促すことです。

OSは、変更されたファイルをブラインドで書き留めることを許可しないことで正しいことをしています。

nsfilepresenter-(void)shinteditemdidchangeを参照して、それが変更されたかどうかを確認してください。ファイルを読み直してから、保存できるかどうかを確認します。ファイルの読み取りが拒否されたとは言わないでください。

また、コードを投稿していないため、ファイルにアクセスして保存するために使用しているコードを表示すると役立つ場合があります。 NSDocumentは、サンドボックスのいくつかのタイプのファイル変更のための取り扱いを組み込みました。

他のヒント

アプリScotteditと競合他社をStackeditとして呼びましょう

いくつかのことが起こっている可能性があります。 nsdocumentにはlockdocumentメソッドがあります。 stackeditはドキュメントをロックしていて、保存後にロックを解除しなかった可能性があります。アプリを終了する場合、ファイルのロックを解除してアプリで利用できるようにする必要があります。この場合、ファイル属性がkqueueまたは他のものを使用して変更される場合の通知を作成する必要があります。

他のアプリがアプリへのアクセスを「ブロック」している場合。その開発者にメールを送信し、彼のアプリを更新して、保存後にドキュメントのロックを解除するように依頼することができます。この最後のステップは、別の開発者が一緒になって同じことをする可能性があるため、通知のセットアップに追加されます(アプリを壊す)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top