4

以下を含むカスタムオブジェクトの配列をアーカイブすることにより、iOSにローカルに保存する小さなアプリを開発しました。

@property (nonatomic, copy) NSString    *name;
@property (nonatomic, copy) NSString    *dateCreated;
@property (nonatomic, copy) NSString    *desc;
@property (nonatomic, copy) NSString    *url;

iCloudを使用して上記のアーカイブを同期したいのですが、推奨されるメカニズムはUIDocumentサブクラスを使用することだと思います。私が見つけたすべてのUIDocumentの例は、単一のインスタンスを1つのNSStringで利用しているため、カスタムオブジェクトの配列全体を同期する方法について少し混乱していますが、UIDocumentを利用しています(今日NSCodingを介してローカルで行っているように)。

上記のプロパティを含むUIDocumentオブジェクトの配列を作成する必要がある場合、上記のデータオブジェクトのインスタンスを1つ含むUIDocumentのインスタンスを作成してから、すべてのインスタンスを含む配列を作成する必要があります。または、1つのUIDocumentに次の完全な配列を含める必要があります。カスタムオブジェクト?

私はいくつかの調査を行いましたが、それでも混乱しています。最終的には、前述のカスタムオブジェクトの配列を含む1つのファイルだけを同期する必要があります。

よろしくお願いします

今日私が持っているのは、Snippetと呼ばれる4つの文字列を持つ上記のカスタムクラスであり、ルートビューコントローラーには、そのSnippetクラスの新しいインスタンスをそれぞれ追加するlistと呼ばれるNSMutableArrayがあります。

self.list = [[NSMutableArray alloc] init];
Snippet *newEntry = [[Snippet alloc] init];
[self.list addObject:newEntry];

カスタムオブジェクトの配列を所有するUIドキュメントサブクラスを作成する必要がありますか?

4

1 に答える 1

2

ドキュメントの例では、文字列が1つしかないUIDocumentサブクラスが実際に示されていますが、からNSDataが返され-contentsForType:error:ます。NSKeyedArchiverを使用して、NSDataに必要な数のオブジェクトを保存できます。NSKeyedArchiverを使用してオブジェクトをエンコードする方法を学ぶために、 Serializing Objectsを読んでください(そして、それらを取り戻す方法を学ぶために読み続けてください!)。

例としてプロパティを使用して...

@interface MyDocument : UIDocument
{
}
@property (nonatomic, copy) NSString    *name;
@property (nonatomic, copy) NSString    *dateCreated;
@property (nonatomic, copy) NSString    *desc;
@property (nonatomic, copy) NSString    *url;
@end

@implementation MyDocument

//...

- (id)contentsForType:(NSString *)typeName error:(NSError **)outError
{
    NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:name forKey:@"name"];
    [archiver encodeObject:dateCreated forKey:@"created"];
    [archiver encodeObject:desc forKey:@"desc"];
    [archiver encodeObject:url forKey:@"url"];
    [archiver finishEncoding];
    // release archiver if you're not using ARC
    return data;
}
@end;

警告:私は上記のコードをコンパイルしていないので、保証はありません。これは、アーカイバを使用して、ドキュメントのコンテンツとして返すことができる単一のデータオブジェクトに複数のオブジェクトを格納する方法を説明するための例として役立ちます。

于 2011-12-12T19:14:04.153 に答える