天天看點

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

CoreData資料庫雖然可以和tableview或者UITableViewController一起使用将資料顯示在表格上,但是在準備資料的時候,這種方式需要用一個可變數組來裝從資料庫一次性取出來的所有資料,然後通過操作這個數組來顯示資料再表格上,從記憶體的優化和性能上來說并不是很好;這裡,介紹一種新的抓取資料的方式,蘋果公司為了進一步優化記憶體,建立了一個從資料庫抓取資料的控制器NSFetchedResultsController,它能從CoreData中一批一批的抓取資料并存放起來,然後通過操作它來将資料顯示在表格中,極大的優化了記憶體;與此同時,這個控制器還提供了一個<NSFetchedResultsControllerDelegate>協定,通過該控制器的代理可以實作資料的實時動畫更新(删除、插入、修改)。CoreData資料庫和UITableViewController以及NSFetchedResultsController一起使用,具有很強大的功能,是一個很不錯的方式,推薦掌握這門技術。以下就具體的例子來介紹:

要求:建立一個實體對象Book資料庫表,多次設定它的屬性,并将它顯示在表格中,顯示後進行的操作有:(1)僅僅進行删除對象、(2)在删除時同時又插入兩條對象資訊、(3)删除時修改它的屬性并再從新顯示該對象

前期的建立資料庫表的具體步驟:

1、建立新項目時,勾選Use Core Data,生成CoreData____NSFetchResultController.xcdatamodel檔案,此時AppDelegate類中自動封裝了sqlite的大量方法和需要的managedObjectContext、managedObjectModel、persistentStoreCoordinator三個對象等;

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

2、點選該檔案,進入設定面闆,點選左下角的Add Entity,建立實體對象并設定它的類名,同時在Attribute處添加該實體對象的屬性;

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

3、選中該實體對象,點選模拟器菜單欄的Editor下的create NSManagedObjectSubclass..,自動生成實體對象的類Book.h和Book.m檔案,類中自動生成了實體對象的所有屬性;

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

4、再一次進入設定面闆,點選右下角的style,可以檢視成功建立的資料庫表。

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

5、進入故事闆Storyboard中,删除viewController控制器和它的類,重新拖入一個新的視圖控制器和一個表格視圖TableView;

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

6、建立一個新的類為BookTableViewController繼承自UITableViewController,并将上面新拖入的視圖控制器關聯這個類即可。好了,前期工作完成。

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

接下來即時具體的代碼操作了:

在AppDelegate類的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中獎資料存儲到資料庫:

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

//将設定上面對象屬性的方法封裝起來

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

在BookTableViewController.m檔案中:

//導入頭檔案,實作協定和定義屬性

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

//NSFetchedResultsController從資料庫抓取資料

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

#pragma mark - Table view data source//顯示表格内容

//組數

//行數

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

//将設定行内容的方法封裝,調用它設定cell内容

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

//設定單元格的編輯與否

//隻進行删除資料

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

//删除資料時,同時新插入插入資料

//删除資料時,修改資料并顯示

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

#pragma mark -<NSFetchedResultsControllerDelegate>代理方法,更新變化後的表格資訊

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

示範結果如下:

沒有進行任何操作時:                       選中單元格往左滑動,删除資料時

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

删除資料時,同時新插入兩個對象                        沒删除一次,對象的屬性價格就發生了改變

iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)
iOS:CoreData資料庫的使用四(資料庫和UITableViewController以及NSFetchedResultsController一起使用)

程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!

本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4833422.html,如需轉載請自行聯系原作者