读者可能已经注意到,如果在某个Objective-C的实现文件中输入init,Xcode就会自动列出一组备选项,其中包括init方法。选择后,Xcode就会在当前位置加入一段init方法的默认实现代码。
Xcode自动加入的这段代码源自代码片段库(code snippet library)。打开工具区域,点击库面板选择条(library selector)中的图标就可以打开代码片段库面板(见图8-13)。此外,也可以使用快捷键Command-Control-Option-2,直接打开工具区域和代码片段库面板(替换快捷键中的数字,可以打开其他的库面板)。
图8-13 代码片段库面板
库面板会列出很多代码片段(见图8-13)。单击其中的一个,然后鼠标稍作悬停,Xcode就会弹出设置窗口并显示相应代码片段的详细信息。单击窗口中的Edit按钮(见图8-14)。
图8-14 代码片段编辑窗口
通过窗口中的Completion Shortcut输入框,可以查看或修改代码片段的触发字符串(在源代码文件中输入该字符串后,会触发Xcode自动加入相应的代码片段)。由图8-14所显示的编辑窗口可知:只有在Objective-C代码中(Language是Objective-C)并且是在类的实现部分(Completion Scopes是Class Implementation)输入init,Xcode才会自动输入init方法的代码片段。
在代码片段库中,虽然Xcode自带的代码片段是只读的,不能编辑,但是读者可创建自定义的代码片段。找到BNRItemsViewController.m中的tableView:numberOfRowsInSection:,选中整个方法,代码如下:
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [[[BNRItemStore sharedStore] allItems] count];
}
将选中的代码段拖曳至代码片段库,Xcode会将这段代码加入代码片段库并弹出编辑窗口,以便读者能够做进一步的设置。
新加入的代码片段有一个缺陷:返回语句是针对Homepwner应用编写的,两者耦合在了一起。如果返回值是某种代码补全占位符(code completion placeholder),就可以很容易地在该位置输入代码。这样,当开发其他应用时,也能很方便地使用这段代码片断。在编辑窗口中,将之前的代码片段改为以下内容:
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return <#number of rows#>;
}
然后根据图8-15填写编辑窗口中的其他输入框,最后单击Done按钮。
图8-15 创建新的代码片段
打开BNRItemsViewController.m,输入tablerows,Xcode会提示可以自动加入之前新增加的那个代码片段。回车后,Xcode会自动加入代码并选中number of rows占位符。(如果有多个占位符,可以使用快捷键Control-/跳到下一个占位符。)
因为之前已经定义了tableView:numberOfRowsInSection:,所以请读者删除这段Xcode自动加入的代码。