国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

詳解ios數(shù)據(jù)存儲(chǔ)的機(jī)制

2020-02-19 15:50:46
字體:
供稿:網(wǎng)友

許多iOS應(yīng)用程序支持選項(xiàng)設(shè)置,如保存用戶名、密碼等等,今天武林技術(shù)頻道帶大家一起進(jìn)入下文學(xué)習(xí)詳解ios數(shù)據(jù)存儲(chǔ)的機(jī)制,希望對(duì)你學(xué)習(xí)這方面知識(shí)有所幫助!

ios數(shù)據(jù)存儲(chǔ)包括以下幾種存儲(chǔ)機(jī)制:

  • 屬性列表
  • 對(duì)象歸檔
  • SQLite3
  • CoreData
  • AppSettings
  • 普通文件存儲(chǔ)

1、屬性列表

?

//?
//? Persistence1ViewController.h?
//? Persistence1?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import <UIKit/UIKit.h>?
#define kFilename @"data.plist"?
?
@interface Persistence1ViewController : UIViewController {?
??? UITextField *filed1;?
??? UITextField *field2;?
??? UITextField *field3;?
??? UITextField *field4;?
}?
@property (nonatomic, retain) IBOutlet UITextField *field1;?
@property (nonatomic, retain) IBOutlet UITextField *field2;?
@property (nonatomic, retain) IBOutlet UITextField *field3;?
@property (nonatomic, retain) IBOutlet UITextField *field4;?
?
- (NSString *)dataFilePath;?
- (void)applicationWillResignActive:(NSNotification *)notification;?
?
@end?

?

?

?


//?
//? Persistence1ViewController.m?
//? Persistence1?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import "Persistence1ViewController.h"?
?
@implementation Persistence1ViewController?
@synthesize field1;?
@synthesize field2;?
@synthesize field3;?
@synthesize field4;?
?
//數(shù)據(jù)文件的完整路徑?
- (NSString *)dataFilePath {?
??? //檢索Documents目錄路徑。第二個(gè)參數(shù)表示將搜索限制在我們的應(yīng)用程序沙盒中?
??? NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);?
??? //每個(gè)應(yīng)用程序只有一個(gè)Documents目錄?
??? NSString *documentsDirectory = [paths objectAtIndex:0];?
??? //創(chuàng)建文件名?
??? return [documentsDirectory stringByAppendingPathComponent:kFilename];?
}?
?
//應(yīng)用程序退出時(shí),將數(shù)據(jù)保存到屬性列表文件?
- (void)applicationWillResignActive:(NSNotification *)notification {?
??? NSMutableArray *array = [[NSMutableArray alloc] init];?
??? [array addObject: field1.text];?
??? [array addObject: field2.text];?
??? [array addObject: field3.text];?
??? [array addObject: field4.text];?
??? [array writeToFile:[self dataFilePath] atomically:YES];?
??? [array release];?
}?
?
/*
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
??? self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
??? if (self) {
??????? // Custom initialization
??? }
??? return self;
}
*/?
?
/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/?
?
?
?
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.?
- (void)viewDidLoad {?
??? [super viewDidLoad];?
??? NSString *filePath = [self dataFilePath];?
??? //檢查數(shù)據(jù)文件是否存在?
??? if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {?
??????? NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];?
??????? field1.text = [array objectAtIndex:0];?
??????? field2.text = [array objectAtIndex:1];?
??????? field3.text = [array objectAtIndex:2];?
??????? field4.text = [array objectAtIndex:3];?
??????? [array release];?
??? }?
??? UIApplication *app = [UIApplication sharedApplication];?
??? [[NSNotificationCenter defaultCenter] addObserver:self?
??????????????????????????????????????????? selector:@selector(applicationWillResignActive:)?
??????????????????????????????????????????? name:UIApplicationWillResignActiveNotification?
??????????????????????????????????????????? object:app];?
??? [super viewDidLoad];?
}?
?
?
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
??? // Return YES for supported orientations
??? return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/?
?
- (void)didReceiveMemoryWarning {?
??? // Releases the view if it doesn't have a superview.?
??? [super didReceiveMemoryWarning];?
?????
??? // Release any cached data, images, etc that aren't in use.?
}?
?
- (void)viewDidUnload {?
??? self.field1 = nil;?
??? self.field2 = nil;?
??? self.field3 = nil;?
??? self.field4 = nil;?
??? [super viewDidUnload];?
}?
?
?
- (void)dealloc {?
??? [field1 release];?
??? [field2 release];?
??? [field3 release];?
??? [field4 release];?
??? [super dealloc];?
}?
?
@end?

?

2、對(duì)象歸檔

?

//?
//? Fourlines.h?
//? Persistence2?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import <Foundation/Foundation.h>?
?
@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?

?

?

?


//?
//? Fourlines.m?
//? Persistence2?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#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 *)aCoder {?
??? [aCoder encodeObject:field1 forKey:kField1Key];?
??? [aCoder encodeObject:field2 forKey:kField2Key];?
??? [aCoder encodeObject:field3 forKey:kField3Key];?
??? [aCoder encodeObject:field4 forKey:kField4Key];?
}?
?
-(id) initWithCoder:(NSCoder *)aDecoder {?
??? if(self = [super init]) {?
??????? field1 = [[aDecoder decodeObjectForKey:kField1Key] retain];?
??????? field2 = [[aDecoder decodeObjectForKey:kField2Key] retain];?
??????? field3 = [[aDecoder decodeObjectForKey:kField3Key] retain];?
??????? field4 = [[aDecoder decodeObjectForKey:kField4Key] retain];?
??? }?
??? return self;?
}?
?
#pragma mark -?
#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;?
}?
@end?

?

?

?


//?
//? Persistence2ViewController.h?
//? Persistence2?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import <UIKit/UIKit.h>?
#define kFilename @"archive"?
#define kDataKey @"Data"?
?
@interface Persistence2ViewController : UIViewController {?
??? UITextField *filed1;?
??? UITextField *field2;?
??? UITextField *field3;?
??? UITextField *field4;?
}?
@property (nonatomic, retain) IBOutlet UITextField *field1;?
@property (nonatomic, retain) IBOutlet UITextField *field2;?
@property (nonatomic, retain) IBOutlet UITextField *field3;?
@property (nonatomic, retain) IBOutlet UITextField *field4;?
?
- (NSString *)dataFilePath;?
- (void)applicationWillResignActive:(NSNotification *)notification;?
?
@end?

?

?

?


//?
//? Persistence2ViewController.m?
//? Persistence2?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import "Persistence2ViewController.h"?
#import "Fourlines.h"?
?
@implementation Persistence2ViewController?
@synthesize field1;?
@synthesize field2;?
@synthesize field3;?
@synthesize field4;?
?
//數(shù)據(jù)文件的完整路徑?
- (NSString *)dataFilePath {?
??? //檢索Documents目錄路徑。第二個(gè)參數(shù)表示將搜索限制在我們的應(yīng)用程序沙盒中?
??? NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);?
??? //每個(gè)應(yīng)用程序只有一個(gè)Documents目錄?
??? NSString *documentsDirectory = [paths objectAtIndex:0];?
??? //創(chuàng)建文件名?
??? return [documentsDirectory stringByAppendingPathComponent:kFilename];?
}?
?
//應(yīng)用程序退出時(shí),將數(shù)據(jù)保存到屬性列表文件?
- (void)applicationWillResignActive:(NSNotification *)notification {?
??? Fourlines *fourlines = [[Fourlines alloc] init];?
??? fourlines.field1 = field1.text;?
??? fourlines.field2 = field2.text;?
??? fourlines.field3 = field3.text;?
??? fourlines.field4 = field4.text;?
?????
??? NSMutableData *data = [[NSMutableData alloc] init];//用于存儲(chǔ)編碼的數(shù)據(jù)?
??? NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];?
?????
??? [archiver encodeObject:fourlines forKey:kDataKey];?
??? [archiver finishEncoding];?
??? [data writeToFile:[self dataFilePath] atomically:YES];?
?????
??? [fourlines release];?
??? [archiver release];?
??? [data release];?
}?
?
/*
?// The designated initializer. Override to perform setup that is required before the view is loaded.
?- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
?self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
?if (self) {
?// Custom initialization
?}
?return self;
?}
?*/?
?
/*
?// Implement loadView to create a view hierarchy programmatically, without using a nib.
?- (void)loadView {
?}
?*/?
?
?
?
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.?
- (void)viewDidLoad {?
??? [super viewDidLoad];?
??? NSString *filePath = [self dataFilePath];?
??? //檢查數(shù)據(jù)文件是否存在?
??? if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {?
?????????
??????? //從文件獲取用于解碼的數(shù)據(jù)?
??????? NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];?
??????? NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];?
?????????
??????? Fourlines *fourlines = [unarchiver decodeObjectForKey:kDataKey];?
??????? [unarchiver finishDecoding];?
?????????
??????? field1.text = fourlines.field1;?
??????? field2.text = fourlines.field2;?
??????? field3.text = fourlines.field3;?
??????? field4.text = fourlines.field4;?
?????????
??????? [unarchiver release];?
??????? [data release];?
??? }?
??? UIApplication *app = [UIApplication sharedApplication];?
??? [[NSNotificationCenter defaultCenter] addObserver:self?
???????????????????????????????????????????? selector:@selector(applicationWillResignActive:)?
???????????????????????????????????????????? name:UIApplicationWillResignActiveNotification?
???????????????????????????????????????????? object:app];?
??? [super viewDidLoad];?
}?
?
?
/*
?// Override to allow orientations other than the default portrait orientation.
?- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
?// Return YES for supported orientations
?return (interfaceOrientation == UIInterfaceOrientationPortrait);
?}
?*/?
?
- (void)didReceiveMemoryWarning {?
??? // Releases the view if it doesn't have a superview.?
??? [super didReceiveMemoryWarning];?
?????
??? // Release any cached data, images, etc that aren't in use.?
}?
?
- (void)viewDidUnload {?
??? self.field1 = nil;?
??? self.field2 = nil;?
??? self.field3 = nil;?
??? self.field4 = nil;?
??? [super viewDidUnload];?
}?
?
?
- (void)dealloc {?
??? [field1 release];?
??? [field2 release];?
??? [field3 release];?
??? [field4 release];?
??? [super dealloc];?
}?
@end?

?

3、SQLite

?

//?
//? Persistence3ViewController.h?
//? Persistence3?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import <UIKit/UIKit.h>?
#define kFilename @"data.sqlite3"?
?
@interface Persistence3ViewController : UIViewController {?
??? UITextField *filed1;?
??? UITextField *field2;?
??? UITextField *field3;?
??? UITextField *field4;?
}?
@property (nonatomic, retain) IBOutlet UITextField *field1;?
@property (nonatomic, retain) IBOutlet UITextField *field2;?
@property (nonatomic, retain) IBOutlet UITextField *field3;?
@property (nonatomic, retain) IBOutlet UITextField *field4;?
?
- (NSString *)dataFilePath;?
- (void)applicationWillResignActive:(NSNotification *)notification;?
@end?

?

?

?


//?
//? Persistence3ViewController.m?
//? Persistence3?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import "Persistence3ViewController.h"?
#import <sqlite3.h>?
?
@implementation Persistence3ViewController?
@synthesize field1;?
@synthesize field2;?
@synthesize field3;?
@synthesize field4;?
?
//數(shù)據(jù)文件的完整路徑?
- (NSString *)dataFilePath {?
??? //檢索Documents目錄路徑。第二個(gè)參數(shù)表示將搜索限制在我們的應(yīng)用程序沙盒中?
??? NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);?
??? //每個(gè)應(yīng)用程序只有一個(gè)Documents目錄?
??? NSString *documentsDirectory = [paths objectAtIndex:0];?
??? //創(chuàng)建文件名?
??? return [documentsDirectory stringByAppendingPathComponent:kFilename];?
}?
?
//應(yīng)用程序退出時(shí),將數(shù)據(jù)保存到屬性列表文件?
- (void)applicationWillResignActive:(NSNotification *)notification {?
??? sqlite3 *database;?
??? if(sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {?
??????? sqlite3_close(database);?
??????? NSAssert(0, @"Failed to open database");?
??? }?
?????
??? for(int i = 1; i <= 4; i++) {?
??????? NSString *fieldname = [[NSString alloc] initWithFormat:@"field%d", i];?
??????? UITextField *field = [self valueForKey:fieldname];?
??????? [fieldname release];?
?????????
??????? char *update = "INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) VALUES (?, ?);";?
??????? sqlite3_stmt *stmt;?
??????? //將SQL語句編譯為sqlite內(nèi)部一個(gè)結(jié)構(gòu)體(sqlite3_stmt),類似java JDBC的PreparedStatement預(yù)編譯?
??????? if (sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) {?
??????????? //在bind參數(shù)的時(shí)候,參數(shù)列表的index從1開始,而取出數(shù)據(jù)的時(shí)候,列的index是從0開始?
??????????? sqlite3_bind_int(stmt, 1, i);?
??????????? sqlite3_bind_text(stmt, 2, [field.text UTF8String], -1, NULL);?
??????? } else {?
??????????? NSAssert(0, @"Error:Failed to prepare statemen");?
??????? }?
??????? //執(zhí)行SQL文,獲取結(jié)果??
??????? int result = sqlite3_step(stmt);?
??????? if(result != SQLITE_DONE) {?
??????????? NSAssert1(0, @"Error updating table: %d", result);?
??????? }?
??????? //釋放stmt占用的內(nèi)存(sqlite3_prepare_v2()分配的)?
??????? sqlite3_finalize(stmt);?
??? }?
??? sqlite3_close(database);?
}?
?
/*
?// The designated initializer. Override to perform setup that is required before the view is loaded.
?- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
?self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
?if (self) {
?// Custom initialization
?}
?return self;
?}
?*/?
?
/*
?// Implement loadView to create a view hierarchy programmatically, without using a nib.
?- (void)loadView {
?}
?*/?
?
?
?
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.?
- (void)viewDidLoad {?
??? [super viewDidLoad];?
??? NSString *filePath = [self dataFilePath];?
??? //檢查數(shù)據(jù)文件是否存在?
??? if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {?
??????? //打開數(shù)據(jù)庫?
??????? sqlite3 *database;?
??????? if(sqlite3_open([filePath UTF8String], &database) != SQLITE_OK) {?
??????????? sqlite3_close(database);?
??????????? NSAssert(0, @"Failed to open database");?
??????? }?
?????????
??????? //創(chuàng)建表?
??????? char *errorMsg;?
??????? NSString *createSQL =??
??????????? @"CREATE TABLE IF NOT EXISTS FIELDS (ROW INTEGER PRIMARY KEY, FIELD_DATA TEXT);";?
??????? if(sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {?
??????????? sqlite3_close(database);?
??????????? NSAssert(0, @"Error creating table: %s", errorMsg);?
??????? }?
?
??????? //查詢?
??????? NSString *query = @"SELECT ROW, FIELD_DATA FROM FIELDS ORDER BY ROW";?
??????? sqlite3_stmt *statement;?
??????? //設(shè)置nByte可以加速操作?
??????? if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {?
??????????? while (sqlite3_step(statement) == SQLITE_ROW) {//返回每一行?
??????????????? int row = sqlite3_column_int(statement, 0);?
??????????????? char *rowData = (char *)sqlite3_column_text(statement, 1);?
?????????????????
??????????????? NSString *fieldName = [[NSString alloc] initWithFormat:@"field%d", row];?
??????????????? NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];?
?????????????????
??????????????? UITextField *field = [self valueForKey:fieldName];?
??????????????? field.text = fieldValue;?
?????????????????
??????????????? [fieldName release];?
??????????????? [fieldValue release];?
??????????? }?
??????????? //釋放statement占用的內(nèi)存(sqlite3_prepare()分配的)?
??????????? sqlite3_finalize(statement);?
??????? }?
??????? sqlite3_close(database);?
??? }?
?????
?????
??? UIApplication *app = [UIApplication sharedApplication];?
??? [[NSNotificationCenter defaultCenter] addObserver:self?
???????????????????????????????????????????? selector:@selector(applicationWillResignActive:)?
???????????????????????????????????????????????? name:UIApplicationWillResignActiveNotification?
?????????????????????????????????????????????? object:app];?
??? [super viewDidLoad];?
}?
?
?
/*
?// Override to allow orientations other than the default portrait orientation.
?- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
?// Return YES for supported orientations
?return (interfaceOrientation == UIInterfaceOrientationPortrait);
?}
?*/?
?
- (void)didReceiveMemoryWarning {?
??? // Releases the view if it doesn't have a superview.?
??? [super didReceiveMemoryWarning];?
?????
??? // Release any cached data, images, etc that aren't in use.?
}?
?
- (void)viewDidUnload {?
??? self.field1 = nil;?
??? self.field2 = nil;?
??? self.field3 = nil;?
??? self.field4 = nil;?
??? [super viewDidUnload];?
}?
?
?
- (void)dealloc {?
??? [field1 release];?
??? [field2 release];?
??? [field3 release];?
??? [field4 release];?
??? [super dealloc];?
}?
?
@end?

?

4、Core Data

?

//?
//? PersistenceViewController.h?
//? Persistence4?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import <UIKit/UIKit.h>?
?
?
@interface PersistenceViewController : UIViewController {?
??? UITextField *filed1;?
??? UITextField *field2;?
??? UITextField *field3;?
??? UITextField *field4;?
}?
@property (nonatomic, retain) IBOutlet UITextField *field1;?
@property (nonatomic, retain) IBOutlet UITextField *field2;?
@property (nonatomic, retain) IBOutlet UITextField *field3;?
@property (nonatomic, retain) IBOutlet UITextField *field4;?
?
@end?

?

?

?


//?
//? PersistenceViewController.m?
//? Persistence4?
//?
//? Created by liu lavy on 11-10-3.?
//? Copyright 2011 __MyCompanyName__. All rights reserved.?
//?
?
#import "PersistenceViewController.h"?
#import "Persistence4AppDelegate.h"?
?
@implementation PersistenceViewController?
@synthesize field1;?
@synthesize field2;?
@synthesize field3;?
@synthesize field4;?
?
?
-(void) applicationWillResignActive:(NSNotification *)notification {?
??? Persistence4AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];?
??? NSManagedObjectContext *context = [appDelegate managedObjectContext];?
??? NSError *error;?
??? for(int i = 1; i <= 4; i++) {?
??????? NSString *fieldName = [NSString stringWithFormat:@"field%d", i];?
??????? UITextField *theField = [self valueForKey:fieldName];?
?????????
??????? //創(chuàng)建提取請(qǐng)求?
??????? NSFetchRequest *request = [[NSFetchRequest alloc] init];?
??????? //創(chuàng)建實(shí)體描述并關(guān)聯(lián)到請(qǐng)求?
??????? NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line"?
???????????????????????????????????????????????????????????? inManagedObjectContext:context];?
??????? [request setEntity:entityDescription];?
?????????
??????? //設(shè)置檢索數(shù)據(jù)的條件?
??????? NSPredicate *pred = [NSPredicate predicateWithFormat:@"(lineNum = %d)", i];?
??????? [request setPredicate:pred];?
?????????
??????? NSManagedObject *theLine = nil;?
??????? ////檢查是否返回了標(biāo)準(zhǔn)匹配的對(duì)象,如果有則加載它,如果沒有則創(chuàng)建一個(gè)新的托管對(duì)象來保存此字段的文本?
??????? NSArray *objects = [context executeFetchRequest:request error:&error];?
??????? if(!objects) {?
??????????? NSLog(@"There was an error");?
??????? }?
??????? //if(objects.count > 0) {?
??????? //? theLine = [objects objectAtIndex:0];?
??????? //} else {?
??????????? //創(chuàng)建一個(gè)新的托管對(duì)象來保存此字段的文本?
??????????? theLine = [NSEntityDescription insertNewObjectForEntityForName:@"Line"?
??????????????????????????????????????????????????? inManagedObjectContext:context];?
??????????? [theLine setValue:[NSNumber numberWithInt:i] forKey:@"lineNum"];?
??????????? [theLine setValue:theField.text forKey:@"lineText"];?
??????? //}?
??????? [request release];?
??? }?
??? //通知上下文保存更改?
??? [context save:&error];?
?????
}?
?
// The designated initializer.? Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.?
/*
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
??? self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
??? if (self) {
??????? // Custom initialization.
??? }
??? return self;
}
*/?
?
?
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.?
- (void)viewDidLoad {?
??? Persistence4AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];?
?????
??? NSManagedObjectContext *context = [appDelegate managedObjectContext];?
??? //創(chuàng)建一個(gè)實(shí)體描述?
??? NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context];?
??? //創(chuàng)建一個(gè)請(qǐng)求,用于提取對(duì)象?
??? NSFetchRequest *request = [[NSFetchRequest alloc] init];?
??? [request setEntity:entityDescription];?
?????
??? //檢索對(duì)象?
??? NSError *error;?
??? NSArray *objects = [context executeFetchRequest:request error:&error];?
??? if(!objects) {?
??????? NSLog(@"There was an error!");?
??? }?
??? for(NSManagedObject *obj in objects) {?
??????? NSNumber *lineNum = [obj valueForKey:@"lineNum"];?
??????? NSString *lineText = [obj valueForKey:@"lineText"];?
??????? NSString *fieldName = [NSString stringWithFormat:@"field%d", [lineNum integerValue]];?
??????? UITextField *textField = [self valueForKey:fieldName];?
??????? textField.text = lineText;?
??? }?
??? [request release];?
?????
??? UIApplication *app = [UIApplication sharedApplication];?
??? [[NSNotificationCenter defaultCenter] addObserver:self??
???????????????????????????????????????????? selector:@selector(applicationWillResignActive:)??
???????????????????????????????????????????????? name:UIApplicationWillResignActiveNotification?
?????????????????????????????????????????????? object:app];?
??? [super viewDidLoad];?
}?
?
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
??? // Return YES for supported orientations.
??? return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/?
?
- (void)didReceiveMemoryWarning {?
??? // Releases the view if it doesn't have a superview.?
??? [super didReceiveMemoryWarning];?
?????
??? // Release any cached data, images, etc. that aren't in use.?
}?
?
- (void)viewDidUnload {?
??? self.field1 = nil;?
??? self.field2 = nil;?
??? self.field3 = nil;?
??? self.field4 = nil;?
??? [super viewDidUnload];?
}?
?
?
- (void)dealloc {?
??? [field1 release];?
??? [field2 release];?
??? [field3 release];?
??? [field4 release];?
??? [super dealloc];?
}?
?
?
?
@end?


5、AppSettings

?

?

?


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];?


6、普通文件存儲(chǔ)

?

這種方式即自己將數(shù)據(jù)通過IO保存到文件,或從文件讀取。

通過武林技術(shù)頻道小編介紹的詳解ios數(shù)據(jù)存儲(chǔ)的機(jī)制,相信大家都有了一定的了解,如需了解更多的相關(guān)資訊,請(qǐng)繼續(xù)關(guān)注武林技術(shù)頻道吧!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广汉市| 嵊泗县| 云南省| 大丰市| 龙州县| 凤冈县| 遵义市| 葫芦岛市| 楚雄市| 安化县| 汶川县| 广河县| 西乌珠穆沁旗| 双城市| 襄垣县| 云龙县| 通州区| 视频| 邓州市| 桐庐县| 佛坪县| 义乌市| 巧家县| 梓潼县| 镇原县| 平潭县| 红原县| 望城县| 小金县| 镇巴县| 资中县| 青川县| 开封县| 罗定市| 许昌市| 高邮市| 习水县| 商洛市| 清涧县| 高陵县| 禄丰县|