objccn 学习笔记_更轻量的 View Controllers

非常感谢 objccn 的各位老师们

2.  更轻量的 View Controllers


把 Data Source 和其他 Protocols 分离出来

把UITableViewDataSource的代码提取出来放到一个单独的类中,是为 view controller瘦身的强大技术之一。

现在你不用担心把一个 index path 映射到数组中的位置了,每次你想把这个数组显示到一个 table view 中时,你都可以复用这些代码。

这样的好处在于,你可以单独测试这个类,再也不用写第二遍。该原则同样适用于数组之外的其他对象。


将业务逻辑移到 Model 中

view controller中的示例代码,用来查找一个用户的目前的优先事项的列表:

既然是用户的优先列表,所以可以把相应的业务逻辑放到User的Categroy中。


创建 Store 类

Store 对象会关心数据加载、缓存和设置数据栈。它也经常被称为服务层或者仓库


把网络请求逻辑移到 Model 层


把 View 代码移到 View 层

xib是为了一个cell定制的,所以不需要用到file‘s owner。


3.  整洁的 Table View 代码


Table View Controllers 的特性

一个特别的好处是它支持 Apple 实现的“下拉刷新”,现在最好的使用UIRefreshCon的方式是在TableVC中,可以在别处,但iOS更新就不行了。


Table View Controllers 的限制

view永远都是一个tableView,所以想要加功能就不行了。代码和xib好迁移,是storyboards就麻烦了。


使用Child View Controllers 是更好的选择

(1) addchildVC

(2) addSubView

需要在父子类之间建立消息传递。

用delegate最佳实践。


分离关注点(Separating Concerns)


搭建 Model 对象和 Cells 之间的桥梁

显示的 model 层中的数据传到 view 层中去显示

一般在cellForRowAtIndexPath中拿cell,data,然后赋值,这样暴露了cell的设计。把数据传入cell的Category来设置。


让 Cells 可复用

有时多种 model 对象需要用同一类型的 cell 来表示,这种情况下,我们可以进一步让 cell 可以复用。首先,我们给 cell 定义一个 protocol,需要用这个 cell 显示的对象必须遵循这个 protocol。然后简单修改 category 中的设置方法,让它可以接受遵循这个 protocol 的任何对象。这些简单的步骤让 cell 和任何特殊的 model 对象之间得以解耦,让它可适应不同的数据类型。


在 Cell 内部控制 Cell 的状态

高亮状态下cell的改变,应该移动cell中处理,不对外界暴露cell的设计。


控制多个 Cell 类型

简单判断



实例代码:

photodata.bin

用于归档出用户数据


Store服务层或者仓库

定义标准的两个初始化方法(类和实例),都会触发readArchive,用NSKeyedUnarchiver解析出photos和users。

sorted方法用photo的创建时间排序。


Photo

实现NSCoder协议两方法用于归档

调整rating


User   类似


PhotosVC:

(1) 初始化TableView  ---  Model和DataSource封装方法,VC只负责调用方法,协调关系

用block建立cellphoto的联系

用app的delegate初始化store(从本地bin解析出users&photos)并排序返回photos

blockphotos初始化VC的DataSource(这个block才知道是什么样的cell,DataSou并不知道,所以DataSou可复用)

注册cell,用于复用。

(2) 处理点击cell

初始化PhotoVC,并传递选中photo

PhotoCell / Category(cell与item具体关联方法)

初始化和高亮阴影处理,分类用于处理与数据的关联。(降低耦合)


ArrayDataSource --- 提供 cell 和 item  -->PhotosVC -(1)

(1) 通过photos & 回调block初始化

(2) 当前展示cell 和 响应 item回调VC中block,建立关联。

PhotoVC ---  界面和child -->PhotosVC -(2)

(1) 根据传递图片更新界面

(2) 初始化DetailsVC(TableView),传递图片,设置delegate(通过key初始化DetailVC)

本文实践:addChildVCaddSubView


DetailsVC

(1) 初始化各种设置

(1.1) 各种DataSource -- 通过KVC(可以拿方法返回值)拿值,区分两种cell(ratingCell 和 Style2Cell)

(2) 点击cell -- 回调delegate(PhotoVC)

RatingCell-->DetailsVC (1.1)

nib初始化,重写set方法(updateRating)(拿每个星星设置响应alpha)

DetailVC   -->DetailsVC (3)

navTitle


Tips:

"this class is not key value coding-compliant for the key ..."问题的解决

一般此问题 都是由interface build与代码中IBOutlet的连接所引起的。

可能是在代码中对iboutlet的名称进行了修改,导致interface build中的连接实效。


IBOutlet连接会出key-value not compliant问题,查看"show the Connections inspector",看有没有怪异的连接。


appDelegate中的store是只读属性,重写只读属性的getter方法,自动合成会失效,所以@synthesize手动合成,使_store可用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容