楼主:
HuangJC (吹笛牧童)
2014-03-28 03:46:05Dear ALL:
在一张大图里,我塞入很多元件
其中一个是 MyView, 继承自 UIView
我知道可以在 IBuilder 环境填入 class name
于是执行时 MyView 的
- (id)initWithCoder:(NSCoder *)aDecoder
就被呼叫了
'如果'我在这里面填入 (我强调了如果,表示我知道这样做有问题;不是不知道)
[[NSBundle mainBundle]loadNibNamed:@"MyView" owner:self options:nil][0];
那么在加载时会递回个不停;原来 loadNib 本身,内部又会去启动 initWithCoder!!
我的解决方法是,在大图的 .m 档 (或说在 controller 档)
那边只关联一个 UIView, 而不是关联 MyView
然后利用这个 UIView 提供的座标去手动加载它
View = [[MyView alloc] initWithFrame:UIViewFrame.bounds];
这时因为我是用 initWithFrame 来初始 MyView 的
所以在其内摆入 loadNib 相关程式码
执行至此时, loadNib 依然内部会叫用 initWithCoder
但现在没关系了,不会递回叫用了,因为 initWithCoder 里,我不安排 loadNib 了
程式是写出来了,只是觉得要绕一大圈
为什么我不能在 IBuilder 环境直接填 class name
而且要利用一个 View 当做 Frame 去占位置呢?
有没有更直接的写法
谢谢
你的写法完全是错的...就说了不要蛮干,先去念些基础的再来吧...
作者:
atst2 (atst2)
2014-03-28 08:57:00Interface Builder都已经帮你把关系连结好了, 你为什么还要自己再call一次?
作者:
yuanruo (罪を憎んで人を憎まず)
2014-03-28 21:17:00看不懂 不过你自己call 自己当然一直递回
你们公司的专案"架构"是一直重复加载自己?这...
作者:
hSATAC (cAt Ash)
2014-03-31 01:32:00错的架构就顺手改掉啊 Xcode refactor 很方便了
楼主:
HuangJC (吹笛牧童)
2014-03-31 02:13:00不是错啦,是我想要更方便;有点落落长了,谁愿意接我私信再回板上有点浪费大家时间;谢谢
你能想到的所谓"简单的方法"是因为你认知错误才会造成的你的方法不是迂回,是错的,根本上就是错的
作者:
atst2 (atst2)
2014-04-01 09:47:001. 你所要做的事,可以直接在IB内, 元件的Info改class name就可以做到.2. 你描述问题的方式有问题,怪我囉?
你那个递回呼叫很明显就是自己根本没搞清楚initWithCoder什么时候,为了什么被呼叫的,这叫"基本"然后不去搞清楚他,自己乱搞挂掉了,这叫"理所当然"所以你到底去看 initWithCode 是为了什么被呼叫了没?
楼主:
HuangJC (吹笛牧童)
2014-04-07 00:54:00我可以贴一段英文,也可以英翻中,但那没有意义当会误会时,会觉得看中文文件也要中翻中而且误会的那部份,还可以整个和文件对映起来,错也错得很妙单纯回你问题:看了
所以是不是我很久之前就跟你讲过的,你根本没搞清楚在干什么?是不是请你不要老是拿以前的经验硬套?