gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:05 25 4
gpt4 key购买 nike

今天,我将我的 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/

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