iOS 6.0,在 iPhone 5 上测试
我正在UICollectionViewController
从笔尖加载一个子类。当我使用该awakeFromNib
方法时,它声称已加载视图。调用collectionView
返回nil
。
因此,我在注册要从中加载我的单元格的笔尖时遇到问题。
- (void)awakeFromNib {
if ([self isViewLoaded])
NSLog(@"[%@ %@] registered with %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd),
self.collectionView);
UINib *nib = [UINib nibWithNibName:@"MyCollectionCell" bundle:nil];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:NIB_ID];
}
上面的输出:
2012-09-22 19:21:49.129 myApp[7182:907] [MyCollectionViewController awakeFromNib] registered with (null)
此外,loadView
并且viewDidLoad
不被调用(从笔尖加载时预期)。
尝试加载单元格时出现异常失败。
当前的解决方法,在以下位置冗余注册 nib collectionView:cellForItemAtIndexPath:
:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UINib *nib = [UINib nibWithNibName:@"MyCollectionCell" bundle:nil];
[collectionView registerNib:nib forCellWithReuseIdentifier:NIB_ID];
问题:你遇到过这个吗?你看到我的方式的错误吗?这是一个已知的错误?
编辑:附加信息……</p>
闯入 awakeFromNib,collectionView
似乎无法访问
(lldb) po [self view]
(UIView *) $1 = 0x1f158400 <UICollectionView: 0x1f158400; frame = (0 0; 320 548); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x1ed8fcf0>; layer = <CALayer: 0x1ed8f790>; contentOffset: {0, 0}> collection view layout: <UICollectionViewFlowLayout: 0x1ed919a0>
(lldb) po [self collectionView]
(UICollectionView *) $2 = 0x00000000 <nil>
修改wakeFromNib
使用view
而不是collectionView
是一个更好的解决方法:
[(UICollectionView *)self.view registerNib:nib forCellWithReuseIdentifier:NIB_ID];