Core Data-Part2
上一篇中,僅對於基本的Core Data的流程有個初步的概念,但是光看NSLog
訊息還是有點生疏,而且依照我目前的程度,是很少去修改到AppDelegate
的部份,所以接著嘗試試著修改Master Detail Application
看看。
最後的結果是希望可以在Table View
中看到我新增的姓名,點選該姓名可以看到該姓名的電話。
**Step 1.**建立Master Detail Application
的專案,專案名稱為core data example。
**Step 2.**開啟core_data_example.xcdatamodeld
,將原本專案預設的Entity
刪除,另外新增一個Phone
的Entity
,並新增兩個Attributes
,name、number,如下圖。
**Step 3.**新增Managed Object Model
,對著專案右鍵New File
➔iOS
➔Core Data
➔NSManagedObjectsubclass
,接著會自動新增二個檔案,Phone.m
跟Phone.h
。
如果沒有直接自動產生,應該會出現以下的畫面,只需要勾選並且下一步即可。
**Step 4.**修改MainStoryboard.storyboard
。
在Navigation
的右方加入一個Bar Button Item
,點選新增是會跑到上面的畫面,讓我們新增姓名還有電話,下面則是點選姓名時可以看到該姓名的電話。因此需要新增一個AddDetailViewController
來控制該新增畫面。在此就不多贅述。
**Step 5.**編輯AddDetailViewController
。
- import
Phone.h
,因為需要透過它來得知Entity
的name
、number
。 - import
AppDelegate.h
,因為需要使用它裡面的NSManagedObjectContext
,所以在此無需重複定義。 - 二個
UITextField
顧名思義就是對應到畫面上二個Text使用的。 app
就是要用來引用NSManagedObjectContext
。save
就是在新增的畫面的Navigation右方,按下save按鈕儲存資料。
1 |
|
第5行,取得AppDelegate的delegate
第6行,透過app取得AppDelegete的NSManagedObjectContext
第7行,定義要加入的Entity是Phone。
第9行,用一個if
檢查欄位的值是否為空白,當不是空白的時候才寫入。
第18~22,當寫入發生錯誤時才會執行。
1 | @synthesize name = name_, number = number_, app; |
**Step 6.**編輯MasterViewController.m
。
這裡僅需要搜尋Event
,並且改成Phone
取代(因為Entity已經被我換掉了),還有搜尋timeStamp
,並且改成name
取代(因為Attribute已經不是timeStamp,我們在Table View
中希望呈現姓名,因此改成name
)。
最後記得要將viewDidLoad
內的方法刪除,僅留下第一行即可(如下)。
1 | - (void)viewDidLoad |
**Step 7.**編輯DetailViewController
因為比原本的專案多了一個UILabel
元件,所以要多定義一個,並且找到configureView
方法,加入第8行設定detailNumber
,而valueForKey
記得要修改成跟Entity
對應的name、number。
1 |
|
1 | @synthesize detailNumber = _detailNumber; |
Step 8.建立關連
最後就是將元件跟IBOutlet
、IBAction
建立關連,在此就不多做贅述了。
範例下載:Download here