iPhone應(yīng)用開發(fā)之模型對(duì)象歸檔
iPhone應(yīng)用開發(fā)之模型對(duì)象歸檔是本文要介紹的內(nèi)容,主要是來介紹歸檔,它指的是另一種型式的序列化,但它是任保對(duì)象都可以實(shí)現(xiàn)的更常規(guī)的類型。其作用為:進(jìn)行數(shù)據(jù)的持久化保存。來看詳細(xì)內(nèi)容。
對(duì)象必須實(shí)現(xiàn)NSCodeing協(xié)議和NSCopying協(xié)議。
- @interface FourLines : NSObject <NSCoding, NSCopying> {
- NSString *field1;
- NSString *field2;
- NSString *field3;
- NSString *field4;
- }
- @property (nonatomic, retain) NSString *field1;
- @property (nonatomic, retain) NSString *field2;
- @property (nonatomic, retain) NSString *field3;
- @property (nonatomic, retain) NSString *field4;
- @end
- #pragma mark NSCoding
- - (void)encodeWithCoder:(NSCoder *)encoder {
- [encoder encodeObject:field1 forKey:kField1Key];
- [encoder encodeObject:field2 forKey:kField2Key];
- [encoder encodeObject:field3 forKey:kField3Key];
- [encoder encodeObject:field4 forKey:kField4Key];
- }
- - (id)initWithCoder:(NSCoder *)decoder {
- if (self = [super init]) {
- self.field1 = [decoder decodeObjectForKey:kField1Key];
- self.field2 = [decoder decodeObjectForKey:kField2Key];
- self.field3 = [decoder decodeObjectForKey:kField3Key];
- self.field4 = [decoder decodeObjectForKey:kField4Key];
- }
- return self;
- }
- #pragma mark NSCopying
- - (id)copyWithZone:(NSZone *)zone {
- FourLines *copy = [[[self class] allocWithZone: zone] init];
- copy.field1 = [[self.field1 copyWithZone:zone] autorelease];
- copy.field2 = [[self.field2 copyWithZone:zone] autorelease];
- copy.field3 = [[self.field3 copyWithZone:zone] autorelease];
- copy.field4 = [[self.field4 copyWithZone:zone] autorelease];
- return copy;
- }
獲取歸檔文件
- - (NSString *)dataFilePath {
- NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- return [documentsDirectory stringByAppendingPathComponent:@"archive"];
- }
對(duì)數(shù)據(jù)進(jìn)行歸檔
- FourLines *fourLines = [[FourLines alloc] init];
- fourLines.field1 = field1.text;
- fourLines.field2 = field2.text;
- fourLines.field3 = field3.text;
- fourLines.field4 = field4.text;
- //對(duì)數(shù)據(jù)進(jìn)行歸檔
- NSMutableData *data = [[NSMutableData alloc] init];
- NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
- [archiver encodeObject:fourLines forKey:@"Data"];
- [archiver finishEncoding];
- [data writeToFile:[self dataFilePath] atomically:YES];
- [fourLines release];
- [archiver release];
- [data release];
獲取歸檔數(shù)據(jù)
- NSString *filePath = [self dataFilePath];
- if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
- NSData *data = [[NSMutableData alloc]
- initWithContentsOfFile:[self dataFilePath]];
- NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
- initForReadingWithData:data];
- FourLines *fourLines = [unarchiver decodeObjectForKey:@"Data"];
- [unarchiver finishDecoding];
- field1.text = fourLines.field1;
- field2.text = fourLines.field2;
- field3.text = fourLines.field3;
- field4.text = fourLines.field4;
- [unarchiver release];
- [data release];
- }
小結(jié):iPhone應(yīng)用開發(fā)之模型對(duì)象歸檔的內(nèi)容介紹完了,希望通過本文對(duì)你有所幫助!