教训啊。。。。从 IB 里拽出来的 view 的引用不能重构 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
jox
V2EX    iDev

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

  •  
  •   jox 2014-10-30 10:45:46 +08:00 3399 次点击
    这是一个创建于 4051 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我把IB里配置的一个view拽了出来,设置为controller的一个weak属性,命名content,然后在后面引用的时候都是这样干的:

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

    这时候我想做一下调整,把名字改为contentWrapper,然后就发现重构不好使了,IB里的对象是编码保存在XML文件里的,应用运行的时候会先从XML文件里解码得到对象然后动态地给这样从IB里拽出来的IBOutlet属性赋值,xcode没法做静态分析,于是就不能重构了,当时写这个文件的时候图省事儿,现在想改就有点麻烦了,改完名字一下蹦出来10多个错误,贪小便宜吃亏了。。。IB好用是好用,但是不明白其中的道理的话,有的时候反而会带来麻烦,如果有不知道这个的朋友在用IB的时候得注意一下了
    第 1 条附言    2014-10-30 13:47:05 +08:00
    不对,刚才我又尝试了一下使用xcode的重构功能来重新命名另一个IBOutlet的属性,这回却成功了,现在我懵了。

    现在有两种可能:

    - 我记错了,我当时没有用重构,而是直接对属性名进行修改

    - 我在IB里面的某个操作造成了这种结果

    我自己记得是使用了重构的,因为上午我调整了一下storyboard里的内容,然后还做了一些操作,然后就发现重构不好使了,但是我想不起来我在storyboard里面都做了什么。。。。我再研究研究。。。。
    第 2 条附言    2014-10-30 14:05:38 +08:00
    这似乎是xcode本身的bug,我又实验了一下,这次重构的过程中xcode直接卡住不动了。。。。xcode应该是可以重构IBOutlet属性的,但是好像在哪里有问题,我上午重构的那个属性是在IB里创建的一个container view,当时是为了少写一些代码就用了,问题似乎就出在这个container view上,我刚试了几下,发现container view会自己消失!这个并不是我删除的,我编辑storyboard的时候它自己就没了,额,我现在也搞不清楚到底是怎么回事了,不过我还是觉得IBOutlet在使用的时候还是得谨慎一些。
    14 条回复    2014-10-30 16:09:00 +08:00
    knightlhs
        1
    knightlhs  
       2014-10-30 10:49:53 +08:00
    基本上 如果不是为了图快 都是用代码实现
    不过需要写的真TMD多
    jox
        2
    jox  
    OP
       2014-10-30 11:01:27 +08:00
    @knightlhs 我现在觉得就得是那种特别简单,保证不会变的东西才能用IB,而且还得谨慎地琢磨一下,这玩意儿到底能不能用IB,用不用?用不用?到底特么地能不能用?

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

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

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

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

    我真是无语了
    fgwww
        9
    fgwww  
       2014-10-30 13:25:51 +08:00
    完全没有理解是什么问题,其他人这样用不都是好好的么
    krafttuc
        10
    krafttuc  
       2014-10-30 13:32:35 +08:00
    很多莫名其妙的问题可能就是你在 IB 的某个小角落打了个勾或是忘了改某个属性。这是 NIB 对 debug 不友好的地方。排查这些错误不光费时间,而且很 frustrating。所以我到现在依然不是 IB 的 fan。
    iimare
        11
    iimare  
       2014-10-30 14:01:03 +08:00
    @jox我明白你的意思啊,我确实成功了
    jox
        12
    jox  
    OP
       2014-10-30 14:05:58 +08:00
    @iimare 我刚又试了一下,这次却成功了,我现在也懵了,汗
    LINAICAI
        13
    LINAICAI  
       2014-10-30 15:46:07 +08:00
    除了cell,说什么也不能用ib或者故事版,太费劲了。
    jox
        14
    jox  
    OP
       2014-10-30 16:09:00 +08:00
    @LINAICAI 我uitableview用的到的地方也很有限,好多列表都是动态生成的,高度、内容都不一样,用tableview的话,得调用delegate的返回高度的那个回调函数,随着滚动还老调用返回cell的回调函数,用了几次觉得太费劲了,还遇到过bug,干脆不用了,直接用scrollview画列表。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3008 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:34 PVG 21:34 LAX 05:34 JFK 08:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86