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