0

姓名とその他の情報が記載されたフォームがあります。私はこの情報を保存するためにpersonクラスを使用します。送信時にクリックします。personクラスに実装されたNSCodingを使用して、person.txtファイルにアーカイブします。ファイルperson.txtに複数の人物を追加した場合、ファイルに保存されているすべての人物オブジェクトを取得するにはどうすればよいですか。人物クラスをデコードすると、最後に追加された人物が表示されます。

4

1 に答える 1

1

すべての人物オブジェクトをシリアル化する場合は、NSArrayまたはそれらが格納されているその他のコレクション クラスを のルート オブジェクトにする必要がありNSKeyedArchiverます。例: (ARC を想定)

#import <Foundation/Foundation.h>

@interface Person:NSObject <NSCoding>
@property (nonatomic, copy) NSString *lastName;
@property (nonatomic, copy) NSString *firstName;
// etc.
@end

@implementation Person

@synthesize lastName = _lastName;
@synthesize firstName = _firstName;

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.lastName forKey:@"ln"];
    [aCoder encodeObject:self.firstName forKey:@"fn"];
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if( !self ) { return nil; }

    _lastName = [aDecoder decodeObjectForKey:@"ln"];
    _firstName = [aDecoder decodeObjectForKey:@"fn"];

    return self;
}

@end

int main(int argc, char *argv[]) {
    NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];

    Person *me = [Person new];
    me.lastName = @"Kitten";
    me.firstName = @"Mittens";

    Person *you = [Person new];
    you.lastName = @"Youe";
    you.firstName = @"JoJo";

    NSArray *people = [NSArray arrayWithObjects:me,you,nil];
    NSData *serializedData = [NSKeyedArchiver archivedDataWithRootObject:people];

    //  write your serializedData to file, etc.

    [p release];
}

しかし、なぜアーカイブの拡張子が .txt なのですか? ただのバイナリデータですよね?

于 2012-09-20T01:44:02.667 に答える