对模型对象进行归档

FourLines.h

 1 #import <Foundation/Foundation.h>

 2 #import <UIKit/UIKit.h>

 3 

 4 

 5 @interface FourLines : NSObject <NSCoding,NSCopying>{

 6     NSString *field1;

 7     NSString *field2;

 8     NSString *field3;

 9     NSString *field4; 

10 }

11 

12 @property (nonatomic,retain)NSString *field1;

13 @property (nonatomic,retain)NSString *field2;

14 @property (nonatomic,retain)NSString *field3;

15 @property (nonatomic,retain)NSString *field4;

16 

17 @end

FourLines.m

#import "FourLines.h"



#define kField1Key    @"Field1"

#define kField2Key    @"Field2"

#define kField3Key    @"Field3"

#define kField4Key    @"Field4"



@implementation FourLines



@synthesize field1;

@synthesize field2;

@synthesize field3;

@synthesize field4;



/**

 将对象编码到文档中

 */

#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]) {

        field1 = [[decoder decodeObjectForKey:kField1Key] retain];

        field2 = [[decoder decodeObjectForKey:kField2Key] retain];

        field3 = [[decoder decodeObjectForKey:kField3Key] retain];

        field4 = [[decoder decodeObjectForKey:kField4Key] retain];

    }

    return self;

}



#pragma mark -

#pragma mark NSCopying

-(void)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;

}

@end

PersistenceViewController.h

 1 #import <UIKit/UIKit.h>

 2 

 3 #define kFileName    @"data.list"

 4 #define kFileName    @"archive"

 5 #define kDataKey    @"Data"

 6 

 7 @interface PersistenceViewController : UIViewController {

 8     UITextField *field1;

 9     UITextField *field2;

10     UITextField *field3;

11     UITextField *field4;

12 }

13 @property (nonatomic,retain)IBOutlet UITextField *field1;

14 @property (nonatomic,retain)IBOutlet UITextField *field2;

15 @property (nonatomic,retain)IBOutlet UITextField *field3;

16 @property (nonatomic,retain)IBOutlet UITextField *field4;

17 

18 - (NSString *)dataFilePath;

19 -(void)applicationWillResignActive:(NSNotification *)notification;

20 

21 @end

PersistenceViewController.m

  1 #import "PersistenceViewController.h"

  2 #import "FourLines.h"

  3 

  4 @implementation PersistenceViewController

  5 @synthesize field1;

  6 @synthesize field2;

  7 @synthesize field3;

  8 @synthesize field4;

  9 

 10 //用于返回数据文件的完整路径名,它通过查找Document目录并对对其附加kFilename累执行该操作。

 11 -(NSString *)dataFilePath{

 12     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

 13     NSString *documentsDirectory = [paths objectAtIndex:0];

 14     return [documentsDirectory stringByAppendingFormat:kFileName];

 15 }

 16 

 17 #pragma mark -

 18 

 19 /*

 20 // The designated initializer. Override to perform setup that is required before the view is loaded.

 21 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

 22     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

 23     if (self) {

 24         // Custom initialization

 25     }

 26     return self;

 27 }

 28 */

 29 

 30 /*

 31 // Implement loadView to create a view hierarchy programmatically, without using a nib.

 32 - (void)loadView {

 33 }

 34 */

 35 

 36 

 37 

 38 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

 39 //在该方法中,我们做了一下操作

 40 /**

 41     1,检查数据文件是否存在

 42     2,数据文件存在,使用该引用订阅UIApplicationWillReSignActiveNotification.

 43     3,我们使用NSNotificationCenter的默认实例,以及addObserver:select:name:object方法。我们传递一个observer即self、这就意味着

 44  PersistenceViewController是需要通知的对象。

 45  */

 46 - (void)viewDidLoad {

 47     NSString *filePath = [self dataFilePath];

 48     if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {

 49         NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];

 50         field1.text = [array objectAtIndex:0];

 51         field2.text = [array objectAtIndex:1];

 52         field3.text = [array objectAtIndex:2];

 53         field4.text = [array objectAtIndex:3];

 54         

 55         [array release];

 56         

 57         NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];

 58         

 59         NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

 60         

 61         FourLines *fourLine = [unarchiver decodeObjectForKey:kDataKey];

 62         

 63         [unarchiver finishDecoding];

 64         

 65         field1.text = fourLine.field1;

 66         field2.text = fourLine.field2;

 67         field3.text = fourLine.field3;

 68         field4.text = fourLine.field4;

 69         

 70         [unarchiver release];

 71         [data release];

 72         

 73     }

 74     

 75     UIApplication *app = [UIApplication sharedApplication];

 76     [[NSNotificationCenter defaultCenter] addObserver:self

 77                                              selector:@selector(applicationWillResignActive:)

 78                                             name:UIApplicationWillResignActiveNotification

 79                                                object:app];

 80     [super viewDidLoad];

 81 }

 82 

 83 /**

 84     

 85  */

 86 -(void)applicationWillResignActive:(NSNotification *)notification{

 87     NSMutableArray *array = [[NSMutableArray alloc] init ];

 88     [array addObject:field1.text];

 89     [array addObject:field2.text];

 90     [array addObject:field3.text];

 91     [array addObject:field4.text];

 92     

 93     [array writeToFile: [self dataFilePath] atomically:YES];

 94     [array release];

 95     

 96     FourLines *fourLine = [[FourLines alloc] init];

 97     fourLine.field1 = field1.text;

 98     fourLine.field2 = field2.text;

 99     fourLine.field3 = field3.text;

100     fourLine.field4 = field4.text;

101     

102     NSMutableData *data = [[NSMutableData alloc] init];

103     NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

104     [archiver encodeObject:fourLine

105                     forKey:kDataKey];

106     [archiver finishEncoding];

107     [data writeToFile:[self dataFilePath] atomically:YES];

108     [fourLine release];

109     [archiver release];

110     [data release];

111     

112 }

113 

114 

115 

116 /*

117 // Override to allow orientations other than the default portrait orientation.

118 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

119     // Return YES for supported orientations

120     return (interfaceOrientation == UIInterfaceOrientationPortrait);

121 }

122 */

123 

124 - (void)didReceiveMemoryWarning {

125     // Releases the view if it doesn't have a superview.

126     [super didReceiveMemoryWarning];

127     

128     // Release any cached data, images, etc that aren't in use.

129 }

130 

131 - (void)viewDidUnload {

132     // Release any retained subviews of the main view.

133     // e.g. self.myOutlet = nil;

134     self.field1 = nil;

135     self.field2 = nil;

136     self.field3 = nil;

137     self.field4 = nil;

138     [super viewDidUnload];

139 }

140 

141 

142 - (void)dealloc {

143     [field1 release];

144     [field2 release];

145     [field3 release];

146     [field4 release];

147     [super dealloc];

148 }

149 

150 @end

你可能感兴趣的:(对象)