1

次のように分割された配列があります。

PersonArray
    PersonObject
       1. NSstring (personsName)
       2. NSMutableArray (EventsObject)

以下のコードでこの配列を保存できます。

NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:mutableDataArray.count];
for (BC_Person *personObject in mutableDataArray)
{
    NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
    [archiveArray addObject:personEncodedObject];
}

NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:archiveArray forKey:@"personDataArray"];
[userData synchronize];

私が行き詰まっているのはNSMutableArray、オブジェクトの内部にオブジェクトを追加する場合、そのPersonオブジェクトの配列 ( EventsObject) を に変換する必要があるNSDataかどうかです。

(私はそうだと思いますが、オブジェクトの配列 ( EventsObject) をターゲットにしてPersonArray.

これを分かりやすく説明していただければ幸いです。

4

1 に答える 1

0

NSArrayおよび他のいくつかのクラスはNSCodingプロトコルを実装します。したがって、コードを次のように単純化できます。

NSData *personData = [NSKeyedArchiver archivedDataWithRootObject:mutableDataArray];
NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
[userData setObject:personData forKey:@"personDataArray"];
[userData synchronize];

また、アーカイブするオブジェクトについては、NSCodingプロトコルを実装します。したがって、次のBC_Personようになります(クラスがわからないため、例としていくつかのプロパティを作成しています):

- (void)encodeWithCoder:(NSCoder *)encoder {

    [encoder encodeObject:self.firstName forKey:@"firstName"];
    [encoder encodeObject:self.lastName forKey:@"lastName"];
    [encoder encodeObject:self.eventObjects forKey:@"eventObjects"];
}

この例では、クラスself.eventObjectsのオブジェクトの配列になります。EventsObject配列はそれ自体をエンコードする方法を知っており、EventsObject別のメソッドを実装するために使用します-encodeWithCoder:

アーカイブを解除するには、プロセスを逆にします。

于 2013-11-04T05:53:11.360 に答える