这里有一个小问题:当前用户是可以选择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。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。