iOS7中的useLayoutToLayoutNavigationTransitions崩溃

时间:2013-09-26 12:17:43

标签: uinavigationcontroller ios7 uicollectionviewlayout

我正在构建一个iOS7应用程序,我正在尝试使用新的useLayoutToLayoutNavigationTransitions效果。我有2 UICollectionViewControllers,当我执行以下操作时,我获得了过渡效果

SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
secondVC.useLayoutToLayoutNavigationTransitions = YES;
[self.navigationController pushViewController:secondVC animated:YES];

这个工作正常,但我要做的是进行api调用,然后在完成块中我想按下这样的导航堆栈

[webAPI getDetailsWithParams:params andCompletionBlock:^(id dict) {

    //some work on the result

    SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    secondVC.useLayoutToLayoutNavigationTransitions = YES;
    [self.navigationController pushViewController:secondVC animated:YES];  


} andErrorBlock:^(NSError *error) {

}];

但每次使用以下msg

时都会崩溃
 -[UICollectionView _invalidateLayoutWithContext:]: message sent to deallocated instance 0x17a26400
在这种情况下,谁能告诉我我做错了什么?从完成块推送时如何获得过渡效果?

编辑:通过将其更改为以下内容,我可以转换到第二个视图控制器。

MyLayout *layout = [[MyLayout alloc] init];
SecondViewController *expandedVC = [[SecondViewController alloc] initWithCollectionViewLayout:layout];

我还删除了随文件一起使用的nib文件。 nib文件只包含一个集合视图,它是文件所有者视图。 虽然我现在可以转换,但仍然不明白为什么我不能在块中执行先前的nib方法。如果有人可以为我阐明它,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

为了使用UICollectionViewController的useLayoutToLayoutNavigationTransitions进行转换,必须知道SecondViewController的布局。但是,如果使用initWithNibName:bundle:initializer,则布局尚未内部准备,无法实现所需的转换。正如您在编辑过的问题中提到的,您必须使用[UICollectionViewController initWithCollectionViewLayout:]来初始化您的第二个UICollectionViewController。由于您的xib文件与您的类名同名,因此UIViewController.xib将由UICofflectionController的超类UIViewController自动加载。

答案 1 :(得分:0)

我认为你是从一个不是主线程的线程进行UIKit调用