ios Coredata 關聯 UITableView 資料自動更新

SQC發表於2013-11-20

昨天寫了一篇關於coredata的文章,自己覺得挺傻的文章。沒想其它程式設計師看過後覺得更傻,於是今天決定寫一篇厲害點的,首先寫了一個coredata和uitableview結合的框架,非常簡單實現了資料變化時對應的uitableview的檢視也變化的效果。

1.考慮到很多地方都要用到fetchedresultscontroller這個功能,如果每個類裡都寫的這些程式碼的話,看著很不簡約,於是就寫了SQCFetchedResultsController這個類檔案,首先考慮它和外部類的對接部分:

a.需要有個NSFetchedResultsController的屬性

b.uitableviewcell的名字和reuseIdentifier,這裡就合二為一了

c.一個暫停的屬性

d.初始化方法

e.定義一個協議,因為cell的內容不一樣,所以由大家自己來填充內容,- (void)configCellData:(id)data cell:(id)cell;

另外一個方法是點選cellrow會出發的方法,

2.好的,把這些定義好之後開始寫實現的方法,在這裡面需要由初始化的時候傳過來一個tableview,所以在這裡是實現uitableview的datasource和delegate的方法

其實感覺FetchedResultsController和uitableview的datasource差不多都是有section和row,section.numberOfObjects就是資料庫中的section的資料的個數

3.在建立uitableviewcell的時候用了一個通用的方法NSClassFromString,根據傳過來的字串,建立cell,這裡要確保工程裡面包含這個cell,如果是用系統的就傳UITableViewCell就行了。

4.cell上的怎麼顯示資料就由程式設計師門自己來搞了 [_delegate configCellData:data cell:cell];

5.通過set方法來設定sqcFetchedResultsController的delegate,並且通過設定delegate為nil和self來控制是否暫停

6.最後實現FetchedResultsController的自動改變資料的delegate方法即可,

7.用的時候就比之前那個傻傻的方法要簡單多了,建立一個物件,並且實現兩個delegate方法,就行了,

8.注意了,這裡建立物件的時候需要一個fetchedResultsController,而建立這個fetchedResultsController最好是在你需要的那個entity裡面建立

好了,結束。之前的程式碼已經被我覆蓋掉了,新程式碼在這裡:

https://github.com/sunqichao/TestCoreData

相關文章