使用属性列表持久化应用程序
PersistenceViewController.h文件
1 #import <UIKit/UIKit.h> 2 3 #define kFileName @"data.list" 4 5 @interface PersistenceViewController : UIViewController { 6 UITextField *field1; 7 UITextField *field2; 8 UITextField *field3; 9 UITextField *field4; 10 } 11 @property (nonatomic,retain)IBOutlet UITextField *field1; 12 @property (nonatomic,retain)IBOutlet UITextField *field2; 13 @property (nonatomic,retain)IBOutlet UITextField *field3; 14 @property (nonatomic,retain)IBOutlet UITextField *field4; 15 16 - (NSString *)dataFilePath; 17 -(void)applicationWillResignActive:(NSNotification *)notification; 18 19 @end
PersistenceViewController.m
1 #import "PersistenceViewController.h" 2 3 @implementation PersistenceViewController 4 @synthesize field1; 5 @synthesize field2; 6 @synthesize field3; 7 @synthesize field4; 8 9 //用于返回数据文件的完整路径名,它通过查找Document目录并对对其附加kFilename累执行该操作。 10 -(NSString *)dataFilePath{ 11 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 12 NSString *documentsDirectory = [paths objectAtIndex:0]; 13 return [documentsDirectory stringByAppendingFormat:kFileName]; 14 } 15 16 #pragma mark - 17 18 /* 19 // The designated initializer. Override to perform setup that is required before the view is loaded. 20 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 21 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 22 if (self) { 23 // Custom initialization 24 } 25 return self; 26 } 27 */ 28 29 /* 30 // Implement loadView to create a view hierarchy programmatically, without using a nib. 31 - (void)loadView { 32 } 33 */ 34 35 36 37 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 38 //在该方法中,我们做了一下操作 39 /** 40 1,检查数据文件是否存在 41 2,数据文件存在,使用该引用订阅UIApplicationWillReSignActiveNotification. 42 3,我们使用NSNotificationCenter的默认实例,以及addObserver:select:name:object方法。我们传递一个observer即self、这就意味着 43 PersistenceViewController是需要通知的对象。 44 */ 45 - (void)viewDidLoad { 46 NSString *filePath = [self dataFilePath]; 47 if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 48 NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath]; 49 field1.text = [array objectAtIndex:0]; 50 field2.text = [array objectAtIndex:1]; 51 field3.text = [array objectAtIndex:2]; 52 field4.text = [array objectAtIndex:3]; 53 54 [array release]; 55 } 56 57 UIApplication *app = [UIApplication sharedApplication]; 58 [[NSNotificationCenter defaultCenter] addObserver:self 59 selector:@selector(applicationWillResignActive:) 60 name:UIApplicationWillResignActiveNotification 61 object:app]; 62 [super viewDidLoad]; 63 } 64 65 /** 66 67 */ 68 -(void)applicationWillResignActive:(NSNotification *)notification{ 69 NSMutableArray *array = [[NSMutableArray alloc] init ]; 70 [array addObject:field1.text]; 71 [array addObject:field2.text]; 72 [array addObject:field3.text]; 73 [array addObject:field4.text]; 74 75 [array writeToFile: [self dataFilePath] atomically:YES]; 76 [array release]; 77 } 78 79 80 81 /* 82 // Override to allow orientations other than the default portrait orientation. 83 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 84 // Return YES for supported orientations 85 return (interfaceOrientation == UIInterfaceOrientationPortrait); 86 } 87 */ 88 89 - (void)didReceiveMemoryWarning { 90 // Releases the view if it doesn't have a superview. 91 [super didReceiveMemoryWarning]; 92 93 // Release any cached data, images, etc that aren't in use. 94 } 95 96 - (void)viewDidUnload { 97 // Release any retained subviews of the main view. 98 // e.g. self.myOutlet = nil; 99 self.field1 = nil; 100 self.field2 = nil; 101 self.field3 = nil; 102 self.field4 = nil; 103 [super viewDidUnload]; 104 } 105 106 107 - (void)dealloc { 108 [field1 release]; 109 [field2 release]; 110 [field3 release]; 111 [field4 release]; 112 [super dealloc]; 113 } 114 115 @end