今天學習了 ios 中 使用Core Data進行持久化,首先說一下對這東西的理解
Core Data是一種 穩定,功能全面的持久化工具,和之前的一些持久化 工具相比,他不需要對實體進行歸檔,也就是序列化,而是在資料 模型編輯器中建立一些實體
在代碼中,你不再使用存取方法和修改方法,而是使用索引值對編碼來設定屬性或者減縮他們的值
那麼這些託管對象的即時區域在哪 ? 他們位於所謂的持久庫中,預設情況下,Core Data應用程式將持久庫實現為儲存在應用程式文檔目錄的sqlite資料庫。
雖然資料是通過sqlite儲存的,但架構中的類將完成載入和儲存資料的相關工作。不許要編寫任何sql語句。下面貼代碼。
首先我建立了一個名字叫Line的實體,其中含兩個屬性 很簡單,(int) lineNum和 (string)lineText
/////////////////////////////////////////////////////////////////////////
- (void)viewDidLoad {
Core_Data_PersistenceAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext]; //建立上下文
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context];//建立實體
NSFetchRequest *request = [[NSFetchRequest alloc] init];//抓取請求
[request setEntity:entityDescription];
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
NSLog(@"There was an error!");
}
//迴圈得到的對象數組
for (NSManagedObject *oneObject in objects) {
NSNumber *lineNum = [oneObject valueForKey:@"lineNum"];
NSString *lineText = [oneObject valueForKey:@"lineText"];
NSString *fieldName = [NSString stringWithFormat:@"field%d",lineNum];
UITextField *theField = [self valueForKey:fieldName];
theField.text = lineText;
}
[request release];
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app];
[super viewDidLoad];
}
/////////////////////////////////////////////////////////////////////
Core_Data_PersistenceAppDelegate *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];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Line" inManagedObjectContext:context];
[request setEntity:entityDescription];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(lineNum = %d)",i];
[request setPredicate:pred];
NSManagedObject *theLine = nil;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
NSLog(@"There was an error!");
}
if ([objects count]>0) {
theLine = [objects objectAtIndex:0];
}
else {
theLine = [NSEntityDescription insertNewObjectForEntityForName:@"Line" inManagedObjectContext:context]; //新插入一個實體
}
[theLine setValue:[NSNumber numberWithInt:i] forKey:@"lineNum"];//設定實體的值
[theLine setValue:theField.text forKey:@"lineText"];
[request release];
}
[context save:&error]; //最後儲存實體 如果儲存出錯會返回error
初級應用 希望對初學者 有協助