這里有一個小問題:當前用戶是可以選擇EmptyCell的,要解決這個問題需執行以下代碼:
現在在模擬器上再運行App試試:
在屏幕上還看不到任何新內容,那是因為你還沒有添加新內容。但是在模擬器運行時,在Terminal里輸入以下內容,就知道雖然屏幕上不顯示,但是后臺并沒有停止運作:
更新label,顯示新任務,這些很簡單。 在main_view_controller.rb 里定義一個封裝方法,是為了給MainView 返回task_name_label 。在tasks_image 下添加:
然后,將這個私有方法插入MainViewController執行的底部:
后,為MainViewController執行viewDidAppear:,然后調用里面的set_task_name_label_from_current_task。記得調用super時,首先執行如下代碼:
創建和運行App,湊效了嗎?這次選擇新任務時,task_name_label會隨著任務名稱而更新。

就快成功了;再添加一樣東西,功能就完整了!——刪除已經完成的任務——當用戶大功告成后,劃去列表上的舊任務時,那感覺一定很暢快!
添加這個功能要在tasks_view_controller.rb里執行UITableViewDelegate方法:tableView:canEditRowAtIndexPath:和tableView:commitEditingStyle:forRowAtIndexPath:,
如下所示:
來詳細闡述一下上面的內容:
當有任務時,控制器允許編輯任務,tableView:canEditRowAtIndexPath:直接返回true。
更多用到的是tableView:commitEditingStyle:forRowAtIndexPath,這里詳細說明一下:
首先,它的作用是檢驗editing_style的值,如果是UITableViewCellEditingStyleDelete,那么調用delete_task_at_index(還未被定義)就可以刪除任務。
如果數據庫里還有其他任務,那么這一行就隨著可愛的動畫UITableViewRowAnimationFade從表格視圖中刪除;否則表格重新加載,伴著UITableViewRowAnimationFade動畫顯示EmptyCell。
關閉end之前,在TasksViewController的底部定義delete_task_at_index:
這個私有方法根據todays_tasks的index標記要劃掉的任務,并從數據庫中刪除,再更新數據庫。后一行調用在Task里定義的reset_current方法來清除當前任務。
創建和運行App,試試添加和刪除功能:

好啦,你已經成功用RubyMotion App執行了Core Data,是不是高效簡潔,一目了然呢?
當然了,有了Core Data和RubyMotion,能做的事情太多了,絕不僅僅止于一個小小的計時器App那么簡單。我推薦讀者參閱記錄在案的完整源代碼以及CDQ的README和documentation。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。