ios - iOS 7.1 中处理 PresentViewController 方法时应用程序突然崩溃

标签 ios iphone crash ios7.1 xcode5.1

今天,我将 Xcode 升级到最新版本(版本 5.1 (5B130a))以支持 iOS 7.1。 完成此操作后,我像往常一样在 Xcode 中运行我的项目。然后应用程序崩溃。 在升级SDK版本之前我没有更改任何代码。 该代码在 iOS 5.x、6.x、7.0.x 中完美运行。

我只是在当前 View Controller 中呈现另一个 View Controller 。 它们都是由 Storyboard初始化的。 在处理presentViewController方法时,它收到错误消息“Thread 1:EXC_BAD_ACCESS(code=2,address=0x60)”。我检查了变量,它们都是活的,而不是释放的垃圾。 iOS 7.1 有什么问题吗?

该项目正在使用非ARC机制。 这是我的代码:

@property (nonatomic, retain) ArticleViewController *articleView;
....

self.articleView = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"ArticleViewController"];
...

[self presentViewController:self.articleView animated:NO completion:^() {
    log(@"has shown article page...");
}];

但如果使用 addSubView 函数呈现另一个 View ,效果很好:

[self.view addSubView:self.articleView.view];

我真的不知道为什么会发生这种情况。

最佳答案

在使用 modalPresentationStyle = UIModalPresentationCustom; 呈现 View Controller 时,我的应用程序发生了这种情况

这是我的代码在 iOS 7.0 上的样子:

//Inside my MyPresentedViewController:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        [self setupContent];
    }
    return self;
}

- (void)setupContent
{
    //TransitionManager adopts UIViewControllerTransitioningDelegate and UIViewControllerAnimatedTransitioning
    TransitionManager *transitionManager = [[TransitionManager alloc] init];
    transitionManager.presenting = YES;

    self.modalPresentationStyle = UIModalPresentationCustom;
    self.transitioningDelegate = transitionManager;
}

但是,上面的代码在 iOS 7.1 上崩溃,所以我将实现更改为:

@interface MyPresentedViewController

@property (nonatomic, strong) TransitionManager *transitionManager;

@end

...

//Inside my MyPresentedViewController:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        [self setupContent];
    }
    return self;
}

- (void)setupContent
{
    //TransitionManager adopts UIViewControllerTransitioningDelegate and UIViewControllerAnimatedTransitioning
    self.transitionManager = [[TransitionManager alloc] init];
    _transitionManager.presenting = YES;

    self.modalPresentationStyle = UIModalPresentationCustom;
    self.transitioningDelegate = _transitionManager;
}

基本上,我没有在 setupContent 方法中声明 transitionManager 对象,而是为其创建了一个私有(private)属性(强引用)。

关于ios - iOS 7.1 中处理 PresentViewController 方法时应用程序突然崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22369329/

相关文章:

ios - 快速更改 titleTextAttribute

iphone - 检查 NSMutableArray 中是否存在某些内容

iphone - 如何将 iPhone 联系人拉入 UIWebView?

java.lang.RuntimeException : How do I solve this crash? 是什么原因造成的?

ios - 在标签栏 Controller 中嵌入 'show' segues

ios - Cocos2d Sprite 无法在设备上运行

ios - 应用程序发送旧推送和新推送

iOS Instagram 登录获取 Instagram 用户 ID?

objective-c - iOS:为什么这个实例被释放?

c - 当我为 & records[*Count].source 输入值时,.exe 崩溃