0

この質問はコピーのように見えますが、そうではありません。私のContactクラスは、NSCodingプロトコルを確認し、メソッドを実装します。

#pragma mark Encoding/Decoding
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    NSLog(@"Encoding");
    [aCoder encodeObject:self.firstName forKey:@"firstName"];
    NSLog(@"First name encoded");
    [aCoder encodeObject:self.lastName forKey:@"lastName"];
    NSLog(@"Last name encoded");
    [aCoder encodeInt:self.age forKey:@"age"];
    NSLog(@"Age encoded");

    [aCoder encodeObject:self.phoneNumbers forKey:@"phoneNumbers"];


    NSLog(@"Encoding finished");

}


- (id) initWithCoder: (NSCoder *)coder
{
    if (self = [super init])
    {
        [self setFirstName:[coder decodeObjectForKey:@"firstName"]];
        [self setLastName:[coder decodeObjectForKey:@"lastName"]];
        [self setPhoneNumbers:[coder decodeObjectForKey:@"phoneNumbers"]];
        [self setAge:[coder decodeIntForKey:@"age"]];
    }
    return self;
}

PhoneNumbersは辞書であり、エンコードが到達してエンコードすると、アプリケーションがクラッシュします。そして、これは私が連絡先配列をシリアル化する方法です:

#pragma mark Import/Export

//Export Contacts to file
-(void)exportContactsToFile
{
    BOOL done=[NSKeyedArchiver archiveRootObject:self.contacts toFile:[PathUtility getFilePath:@"phonebook"]];

}

//Import Contacts from file

-(void)importContactsFromFile
{
    self.contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:[PathUtility getFilePath:@"phonebook"]];

}

NSDictionaryをプロパティとしてシリアル化するにはどうすればよいですか?ありがとう

4

1 に答える 1

1

NSPropertyListSerializationクラスは、プロパティリストオブジェクトをXMLまたは最適化されたバイナリ形式との間で変換するシリアル化メソッドを提供します。NSPropertyListSerializationクラスオブジェクトは、シリアル化プロセスへのインターフェイスを提供します。NSPropertyListSerializationのインスタンスは作成しません。

NSDictionary *propertyList= @{ @"FirstNameKey" : @"Edmund",
                           @"LastNameKey" : @"Blackadder" };
NSString *errorStr;
NSData *dataRep = [NSPropertyListSerialization dataFromPropertyList:propertyList
            format:NSPropertyListXMLFormat_v1_0
            errorDescription:&errorStr];
if (!dataRep) {
// Handle error
}
于 2012-09-04T09:35:05.047 に答える