教训啊。。。。从 IB 里拽出来的 view 的引用不能重构

2014-10-30 10:45:46 +08:00
 jox
我把IB里配置的一个view拽了出来,设置为controller的一个weak属性,命名content,然后在后面引用的时候都是这样干的:

self.content ...
self.content ...

这时候我想做一下调整,把名字改为contentWrapper,然后就发现重构不好使了,IB里的对象是编码保存在XML文件里的,应用运行的时候会先从XML文件里解码得到对象然后动态地给这样从IB里拽出来的IBOutlet属性赋值,xcode没法做静态分析,于是就不能重构了,当时写这个文件的时候图省事儿,现在想改就有点麻烦了,改完名字一下蹦出来10多个错误,贪小便宜吃亏了。。。IB好用是好用,但是不明白其中的道理的话,有的时候反而会带来麻烦,如果有不知道这个的朋友在用IB的时候得注意一下了
2951 次点击
所在节点    iDev
14 条回复
knightlhs
2014-10-30 10:49:53 +08:00
基本上 如果不是为了图快 都是用代码实现
不过需要写的真TMD多
jox
2014-10-30 11:01:27 +08:00
@knightlhs 我现在觉得就得是那种特别简单,保证不会变的东西才能用IB,而且还得谨慎地琢磨一下,这玩意儿到底能不能用IB,用不用?用不用?到底特么地能不能用?

反正挺纠结的。。。用IB有些配置就容易点,拿鼠标点一点就行,不用一行一行地在代码里配置,但就怕出现这样的问题,不好控制。

IB只能编码对象和对象之间的关系,应用的逻辑不能编码,这个也挺蛋疼的,我的教训就是用IB用HIGH了,后来发现涉及到了逻辑问题,一下傻眼了,还得回去老老实实地用代码来控制,感觉IB就得用来保存一些配置好的对象,配好ID然后用的时候从XML里取,否则用多了经常出问题
knightlhs
2014-10-30 11:03:33 +08:00
外包项目必须用IB不然满足不了时效要求
自己的产品也可以 不过可以考虑把内部元素用IB实现
但是外部的界面必须用代码
像拼积木一样处理

不然万一要重构 太痛苦了 跟重写也没啥区别了
jox
2014-10-30 11:07:00 +08:00
@knightlhs 是啊,就得把IB当做材料库,然后用代码做胶水,把对象一个个拼接起来。

要是在好多地方都大量使用IBOutlet,我简直不敢想象如果出现问题那得需要多少工作量啊,想想就觉得蛋痛
nagato
2014-10-30 11:13:31 +08:00
鼠标右键->Refactor->Rename
jox
2014-10-30 11:17:39 +08:00
@nagato ...
iimare
2014-10-30 12:36:24 +08:00
你需要做得是将鼠标指针放在需要重命名的地方Edit->Refactor->Rename,更改名字,Perview,然后看看Perview的结果里xib的名字变了吗?
还有,我现在觉得IB布局实在是太方便了,尤其你要使用Autolayout的时候
jox
2014-10-30 12:39:05 +08:00
@iimare 。。。。。你再好好看看我的帖子,运行过程中动态生成的对象xcode没办法做静态分析,重构的基础就是对源代码进行静态分析,

我真是无语了
fgwww
2014-10-30 13:25:51 +08:00
完全没有理解是什么问题,其他人这样用不都是好好的么
krafttuc
2014-10-30 13:32:35 +08:00
很多莫名其妙的问题可能就是你在 IB 的某个小角落打了个勾或是忘了改某个属性。这是 NIB 对 debug 不友好的地方。排查这些错误不光费时间,而且很 frustrating。所以我到现在依然不是 IB 的 fan。
iimare
2014-10-30 14:01:03 +08:00
@jox我明白你的意思啊,我确实成功了
jox
2014-10-30 14:05:58 +08:00
@iimare 我刚又试了一下,这次却成功了,我现在也懵了,汗
LINAICAI
2014-10-30 15:46:07 +08:00
除了cell,说什么也不能用ib或者故事版,太费劲了。
jox
2014-10-30 16:09:00 +08:00
@LINAICAI 我uitableview用的到的地方也很有限,好多列表都是动态生成的,高度、内容都不一样,用tableview的话,得调用delegate的返回高度的那个回调函数,随着滚动还老调用返回cell的回调函数,用了几次觉得太费劲了,还遇到过bug,干脆不用了,直接用scrollview画列表。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/142549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX