我只是更新到iOS 7.1,我得到一个名为“_layoutCells”的函数无法识别的选择错误。
我有一个简单的UITabBarController子类。
答案 0 :(得分:4)
请注意,在找到更好的解决方案或解释之前,这是一个避免错误崩溃的黑客攻击。我虽然应该分享它。
只需将以下方法添加到UITabBarController子类实现中:
- (void) _layoutCells
{
// HACK ALERT: on iOS 7.1, this method will be called from deep within the bowels of iOS. The problem is that
// the method is not implemented and it results in an unrecognized selected crash. So we implement it...
//
// What could go wrong?
}
答案 1 :(得分:3)
感谢GenesisST给出了答案,但我知道方法是有原因的。通常,layoutCells会调用所有子视图的布局。虽然我宁愿等待Apple的回答,但我希望其他人需要在给定的时间线内提交我的应用程序。
在我的情况下,由于一些黑客攻击我得到了这个错误。我已经替换了UIMoreNavigationController委托,它是Apple的一个未记录的类,所以我可以预料到错误。我正在做这个hack来扩展More选项卡的功能,而这个错误只发生在我更改moreNavigationController tableView的委托时。
所以我存储他们的委托,更改它,然后当iOS在我的课堂上调用它时,将_layoutCells调用到他们的委托。
- (void)_layoutCells
{
if([self.moreTableViewDelegate respondsToSelector:@selector(_layoutCells)]){
[self.moreTableViewDelegate performSelector:@selector(_layoutCells)];
}
}
我不知道这是否适用于此处的任何人,但以防其他人因我的边缘情况而来到这里。
答案 2 :(得分:1)
我在我的应用程序中遇到了同样的问题,我向更多的tableview控制器提供了自定义委托/数据源。我还没弄清楚原因,但似乎在更多的tableview控制器上调用_layoutCells方法。 我修复了它,添加了这个方法:
-(NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
// self.viewController is my tabBarController
UINavigationController* moreNavigationController = self.viewController.moreNavigationController;
// Retrieve the more list controller (it is the first in the hierarchy)
id moreListController = moreNavigationController.viewControllers.firstObject;
Class moreTableViewClass = [moreListController class];
if (moreTableViewClass) {
return [moreTableViewClass instanceMethodSignatureForSelector:aSelector];
}
return nil;
}
我已经完成了各种测试,这似乎是一个可靠的解决方法。但如果你能找到更好的解决方案......分享吧!