ios 持久化 Core Data 初級應用

來源:互聯網
上載者:User

今天學習了 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

 

初級應用 希望對初學者 有協助

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.