gpt4 book ai didi

iOS 9 pushViewController 不工作,在 iOS 8 中一切都按预期工作,零代码更改?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:21:17 24 4
gpt4 key购买 nike

当我使用 pushViewController 时,将调用 viewWillDisappear(第一个 View Controller )。在那之后,屏幕卡住,因此没有执行任何操作,我将断点放在 nextviewcontroller 上,它不会在 viewDidLoad 方法中被调用。

//first View Controller from where pushViewController
[[AppCommonFunctions sharedInstance]pushVCOfClass:[NextViewController class] fromNC:[self navigationController] animated:YES popFirstToVCOfClass:nil modifyVC: ^(id info) {
[((NextViewController *)info)setEventInfo : object];
}];


//common method for push view controller in another file
- (void)pushVCOfClass:(Class)class1 fromNC:(UINavigationController *)nc animated:(BOOL)animated popFirstToVCOfClass:(Class)class2 modifyVC:(operationACFFinishedBlock)modify {
RESIGN_KEYBOARD
[self popToViewControllerOfKind : class2 from : nc];
UIViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:[class1 description]];
if (modify) {
modify(vc);
modify = nil;
}
[nc pushViewController:vc animated:animated];
}
- (UIViewController *)popToViewControllerOfKind:(Class)aClass from:(UINavigationController *)navController {
RESIGN_KEYBOARD
if (aClass) {
NSArray *arrayOfViewControllersInStack = navController.viewControllers;
for (int i = 0; i < arrayOfViewControllersInStack.count; i++) {
if ([[arrayOfViewControllersInStack objectAtIndex:i] isKindOfClass:aClass]) {
int index = (i > 0) ? (i - 1) : i;
[navController popToViewController:[arrayOfViewControllersInStack objectAtIndex:index] animated:NO];
break;
}
}
return [navController topViewController];
}
return nil;
}

最佳答案

我也遇到了这个问题。我发现 pushViewController:animated: 后 CPU 使用率为 100%,并且 runloop 卡住了。 View Controller 无法在 loadView 中加载 View 。

在 iOS 9 中,loadView 过程可能在内部发生了变化,或者 Storyboard/xib 文件由于 Xcode 7 而被错误构造(可能只是一个错误)。

第1步,尝试在推送前加载 View

我尝试打印 view 属性以强制调用 loadView 的 View Controller 。

UIViewController *vc = ...;
NSLog(@"vc.view: %@", vc.view); // Never print
[self.navigationController pushViewController:vc animated:YES];

我发现在调用 view 属性时无法加载 View 。 NSLog() 不会打印 View 对象,runloop 卡住了。

第二步,加载 View 时显示调用堆栈

在目标 View Controller 中添加以下 loadView 实现。

- (void)loadView
{
NSLog(@"will loadView");
[super loadView];
NSLog(@"did loadView");
}

构建并运行您的应用程序,并尝试通过调用属性 view 来触发 loadView。现在您应该会发现该应用卡在目标 View Controller 中的 [super loadView] 处。

现在尝试多次暂停执行(Debug » Pause,或cmd + ctrl + Y),你应该会发现应用程序(runloop)几乎卡在了一些特定的方法上。在我的实例中,我的应用卡在 -[NSLocalizableString length](或 objc_msgSend)。

我认为这是调试的提示(我的 View Controller 是由 Storyboard构建的, Storyboard直接在项目中本地化)。


更新

在我通过版本控制 (git) 将 Storyboard文件重置为以前的版本后,应用程序运行良好并且 View 加载成功。

关于iOS 9 pushViewController 不工作,在 iOS 8 中一切都按预期工作,零代码更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32740290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com