Mac OSXアプリでuidocumentを使用できますか?
-
26-10-2019 - |
質問
iOSとOSXの間で共通のドキュメント形式を共有したいと思います。これはMDIアプリケーションではないことに注意してください。保存/ロードするドキュメントが1つあります。 nsdocumentスタイルのユーザー駆動型管理(例:保存、保存、as、openなど)は必要ありません。
最大の課題は、OSXとiOS(まだ)と自然に互換性のある形式をエンコードする一般的なドキュメントをエンコードする一般的なドキュメントがないようです。 iOS用のドキュメントベースのアプリケーションプログラミングガイドによると、NSDocumentとuidocument派生クラスの間でエンコード/デコード変換が必要であるように見えます。 Appleエコシステム全体のすべてのデバイスと互換性のあるユニバーサルシリアル化メカニズムがあることを願っています。この点で、考え、アイデア、ヒントが高く評価されています。
Mac OSXアプリケーションでuidocument派生クラスを使用して、ドキュメントがiOSと互換性があることがありますか?
解決
いいえ、cocoaにはuidocumentが存在しないため、ココアアプリケーションでuidocumentを使用またはサブクラス化することはできません。
nsdocumentとuidocumentの両方で、使用する形式を決定します。したがって、出力と入力に同じ形式を使用するようにそれらを実装するだけです。
Preprocessorを使用して、iOSのために構築するときにMacとuidocumentのために構築するときにNSDocumentのサブクラスを実装するファイルペアを設定するのはそれほど難しくありません。これにより、シリアル化と脱皮化の実装が不一致になることができなくなります。これは、それぞれのコピーが1つだけで、両方のプラットフォームでそれを使用するからです。
他のヒント
上記のピーターの答えは正しいですが、私はC前プロセッサ(Swiftでは利用できない)を含まない提案があります。
WWDC 2014セッション233をご覧になって、単一のプロジェクトでiOSおよびMacアプリを別々のターゲットとして設定し、ドキュメントクラスのカテゴリを使用して共通機能を実装します。
CommonFunctions.h
@interface AppDocument (CommonFunctions)
- (void)function;
@end
-
CommonFunctions.m
@implementation AppDocument (CommonFunctions)
- (void) function {
/// stuff here
}
@end
君の AppDocument
クラスには、各プラットフォーム/ターゲットに必要に応じてUI/NSDocumentから継承する2つの異なるクラスがあり、各ターゲットは共通の場所からカテゴリを引き込みます。