問題タブ [nsarchiving]
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.
iphone - カスタムクラスのサブクラスでのNSCodingの使用
NSCodingを使用して、データ永続性のメソッドとしてカスタムクラスをアーカイブ/アーカイブ解除しています。オブジェクトがNSObjectのサブクラスである場合は正常に機能しますが、カスタムオブジェクトのサブクラスであるオブジェクトもあります。initWithCoder:メソッドとencodeWithCoderを変更する必要がありますか?現在、サブクラスに固有のプロパティは正常にエンコード/デコードされますが、サブクラスがスーパークラスから継承するプロパティはそうではありません。何かご意見は?基本的な構造は次のとおりです。
およびサブクラス:
objective-c - NSuserDefaults からデータを解凍する正しい方法は何ですか?
Objective C ベースのオブジェクトを NSuserdefaults に保存しています。
NSuserDefaults からデータを取得するには、initWithCoder メソッドを使用します。
私はこれの2つの異なる実装を見てきました:
実装 1
実装 2
正しい方法はどれですか?
これら2つの違いは何ですか?
ios - iOS - 膨大な量の任意のバイナリ データを plist または xml として提供するフレームワークはありますか?
パフォーマンス上の理由から、膨大な量の任意のバイナリ データに plist や xml を使用することはお勧めできません。
私のデータ形式が(いくつかの文字列、整数、バイナリデータ)の配列であり、バイナリデータのサイズが数メガバイトを超え(固定されていません)、配列のサイズが数百であるとします。Documents ディレクトリの 1 つのファイルにデータ全体をシリアル化して保存し、そのファイルから一部のデータのみをメモリに読み取りたいと考えています。そのため、最初は plist を使用することが要件を達成する方法であると考えましたが、上記のように良い方法ではありません。
この問題を回避する 1 つの方法は、バイナリ データの代わりにバイナリ データのパスを使用することです。その後、Core Data などを使用できます。しかし、それでは要件を満たしていません。
適切なフレームワークを見つけるのに数日を費やしましたが、何もないようです。私の場合、独自のエンコーディングおよびデコンディング メソッドを作成する必要がありますか? NSArchiving は私の要件を達成するのに十分ですか?
cocoa - NSKeyedArchiver:同じクラスの異なるインスタンスを区別する
OSXアプリにLionの「再開」機能のサポートを実装しています。
NSViewControllerのカスタムサブクラスがあり、encodeRestorableStateWithCoder:asメソッドを実装しました。
ただし、MyClassのインスタンスが複数あるため、異なる値が同じキー( "object_key")に保存され、Cocoaから次の警告が表示されます。
NSKeyedArchiver警告:キー'object_key'の既存の値を置き換えます。クラス階層でのエンコーディングキーの重複の可能性
この問題を克服するためのベストプラクティスは何ですか?
編集:衝突を避けるために、各インスタンスには自動的に独自の名前空間があることがわかりました。そのため、同じNSCoderオブジェクトを持つ別のインスタンスに対してencodeRestorableStateWithCoderを手動で呼び出しているときに、これらが異なるインスタンスであることを通知せずに問題が発生する可能性があります。しかし、それを正しく行う方法がまだわかりません。
前もって感謝します!
objective-c - 文字列にシリアル化するカスタムNSArchiverを構築する
NSArchiverはどのようにファイルにシリアル化しますか?バイナリ形式でシリアル化されていると思いますが、それは正しいですか?SQLiteデータベースに保存できるように文字列に保存したい場合はどうなりますか?独自のカスタムNSArchiverを作成する必要がありますか?もしそうなら、どうすればそれを行うことができますか?そこにチュートリアルはありますか?
ps Core Dataでこれができることはわかっていますが、今はそのオプションを取り消します。
objective-c - ファイルパスを取得するには? ドキュメント ベースのアプリでドキュメントを読み込む
ドキュメントを保存およびロードできるようにしたいので、次の方法を使用しようとしています。
[NSKeyedArchiver archiveRootObject: rootObject toFile: @"myMap.map"];
rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile:@"myMap.map"];
ファイル引数として何を入れるつもりですか? 今のところ定数文字列しかありませんが、それは1つのファイルしかロードできないことを意味します。開いているパネルからユーザーの選択を引数にする方法があると思いますが、どのように?
objective-c - アーカイブ後のオブジェクトの比較
をNSMutableArray
介してアーカイブされたカスタムオブジェクトがありますNSArchiver
。NSMutableArray
アーカイブをバックアップとして取得し、既存のアプリとマージできるようにする必要があります。アプリ内とアーカイブされていないものの間の重複を削除する必要がありますが、オブジェクトを介して比較を使用または使用するNSMutableArray
通常の方法は、元々は等しいものの、アーカイブ後には明らかに機能しません。両方の配列を介してネストされた反復を実行し、オブジェクトivarを比較できますが、それはかなり手間がかかるようです。NSSet
isEqual
containsObject
足りないものはありますか?私はObjective-Cとを使用することに少し慣れていませんNSArchiver
。
objective-c - マップ座標がデコードされない
私のアプリでは、マップ上にあるピンを保存して、ユーザーがアプリを終了した後に開いたときにピンが表示されるようにしようとしています。mkAnnotationクラスをNSCodingに準拠させ、2つの必須メソッドを実装しました。アノテーションはすべてシングルトンクラスのNSMutableArrayに格納されているため、実際には配列をシングルトンクラスに保存しようとしています。すべてが正常にエンコードされていますが、デコードされているとは思いません。ここにいくつかのコードがあります:これは私のMKAnnotationクラスです:
これが私のシングルトンクラスです:
マップビューコントローラのviewDidLoadメソッドで、次のようにマップ上のシングルトン配列に注釈を配置しようとします。
objective-c - 配列のアーカイブを解除した後、突然NSValuesではなくNSRectsが含まれています。を取得する方法、
NSRect
sをsでラップNSValue
して、NSMutableArrayに入れました。NSKeyedArchiver
アプリに保存/読み込み機能を追加したいので、とを使用すると思いNSKeyedUnarchiver
ました。間違い! NSKeyedArchiver cannot archive structs
。少し検索した後、同じ問題を抱えている人からのフォーラム投稿を見つけました。NSArchiver
彼はとを使用してそれを解決しましたNSUnarchiver
。私はそれを実装しましたが、もう一度、それは機能しませんでした。これでエンコードできますが、配列をデコードすると、NSRect
sの配列が返されます。それらを配列に入れることさえできません!しかし、私は自分の直腸を取り戻すことができる限り、気にしません。しかしNSArray
、オブジェクトを取得するためのメソッドしかないため、できません。構造体はオブジェクトではないため、rectを取得できません。これはどのように可能ですか?アーカイブされたrectを取得するにはどうすればよいですか?
MyDocument.mの一部:
ラップしているNSValueが消える可能性はありますか?また、NSRectを安全に保存およびロードするにはどうすればよいですか?
cocoa - Lionのユーザーインターフェイス再開機能用のNSViewControllerのエンコード
履歴書(ユーザーインターフェイスの保存)の目的でNSViewController
ウィンドウ内をアーカイブするためのベストプラクティスは何ですか?私はそれをウィンドウコントローラーのメソッドでアーカイブしようとしましたが 、が呼び出されたときにビューコントローラーがアーカイブ解除されないことを確認しました 。encodeRestorableStateWithCoder:
restoreStateWithCoder:
このビューコントローラには、独自のサブビューを管理する他のビューコントローラが含まれているため、NSCoder
インスタンスでスコープが必要になることに注意してください。指定されたオブジェクトを下に渡すだけcoder
で、アーカイブで名前が衝突します。
前もって感謝します!