0

次のオブジェクトの配列があります。

@interface SACameraLocation : NSObject
{
    NSInteger locId;
    NSString *name;
    CLLocationCoordinate2D coordinate;
    NSInteger speed;
    NSInteger shootingMode;
    NSInteger side;
}

次に、配列を plist ファイルに書き込もうとしています:

if([arr writeToFile:path atomically:YES])
    NSLog(@"Write OK");
else
    NSLog(@"Write Fail");

これは、スカラーオブジェクトが原因で失敗すると思います。そのようなオブジェクトをファイルにシリアライズ/デシリアライズする最も簡単な方法は何ですか?

4

1 に答える 1

0

のドキュメントをお読みくださいNSArray writeToFile:atomically::

配列の内容がすべてプロパティ リスト オブジェクト (NSString、NSData、NSArray、または NSDictionary オブジェクト) である場合、このメソッドによって書き込まれたファイルを使用して、クラス メソッド arrayWithContentsOfFile: またはインスタンス メソッド initWithContentsOfFile: で新しい配列を初期化できます。このメソッドは、ファイルを書き出す前に、含まれているすべてのオブジェクトがプロパティ リスト オブジェクトであることを再帰的に検証し、結果のファイルが有効なプロパティ リストではないため、すべてのオブジェクトがプロパティ リスト オブジェクトでない場合は NO を返します。

カスタム オブジェクトの配列を書き込むことはできません。これが失敗する理由です。クラスをNSCodingプロトコルに準拠させ、2 つの必須メソッドを実装できます。NSData次に、オブジェクトをusingに変換できますNSKeyedArchiverNSDataまたは、アーカイバーを使用して一度に配列全体をエンコードしてから、1 つのオブジェクトを書き出すことができます。

もう 1 つのオプションは、オブジェクトを に変換し、NSDictionaryそれらの辞書の配列を書き出すことです。

于 2013-04-12T15:02:10.947 に答える