我的视图控制器正在通过该presentViewController:animated:completion:
方法呈现视图。视图很好。
然后我关闭这个视图并重新呈现它并得到以下崩溃:
*** -[WebBrowser isKindOfClass:]: message sent to deallocated instance 0x1f640ac0
我的代码正在使用 ARC。这是我的 WebBrowser 类的代码,一个简单的嵌入式浏览器。
浏览器.h:
@interface WebBrowser : ITViewController <UIWebViewDelegate, UIAlertViewDelegate>
@property (nonatomic, strong) NSString *URL;
@property (nonatomic, weak) IBOutlet UIWebView *webView;
@property (nonatomic, weak) IBOutlet UIActivityIndicatorView *spinner;
- (id)initWithURL:(NSString *)URL;
- (IBAction)dismissView:(id)sender;
@end
浏览器.m:
@implementation WebBrowser
- (id)initWithURL:(NSString *)URL_ {
self = [super initWithNibName:@"MyNib" bundle:nil];
if (self) {
self.URL = URL_;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.webView.delegate = self;
if (self.URL) {
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.URL]]];
}
}
- (IBAction)dismissView:(id)sender {
self.URL = nil;
[self.webView stopLoading];
self.webView.delegate = nil;
[self dismissViewControllerAnimated:YES completion:NULL];
}
// + some non-related web view delegate stuff
@end
最后,这是我在父视图控制器中呈现视图的方式:
WebBrowser *browser = [[WebBrowser alloc] initWithURL:URL];
[self presentViewController:browser animated:YES completion:NULL];
我正在运行 iOS 6 并使用 ARC 进行编译。
首先,我认为这个错误与 ARC 相关。这是我的原帖:
原帖
我注意到我的应用程序在使用 iOS 6.x 时在显示模式视图控制器并在它与以前版本的 iOS 正常工作时释放它时崩溃。
怪我还没有使用 ARC(这是我在这个项目上的下一个重要步骤),但是例如,当使用以下代码显示 Game Center 排行榜时,以下步骤:
- 显示排行榜
- 关闭排行榜
- 再次显示排行榜(精确更新:通过运行
showLeaderboard
如下所示的相同,即显示 的新实例GKLeaderboardViewController
)
然后,发生以下错误
*** -[GKLeaderboardViewController isKindOfClass:]: message sent to deallocated instance 0x17467120
这是我的代码:
- (void)showLeaderboard {
if ([[GKLocalPlayer localPlayer] isAuthenticated]) {
GKLeaderboardViewController *lb = [[GKLeaderboardViewController alloc] init];
lb.category = ...;
lb.leaderboardDelegate = self;
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:lb animated:YES];
[lb release];
} else {
...
}
}
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController{
[self dismissModalViewControllerAnimated:YES];
}
事实证明,删除[lb release]
指令解决了我的问题,而且 iOS 5.x 也不会发生这种崩溃。
Game Center 成就视图控制器或我的任何其他自定义视图控制器显示为presentModalViewController:
.
似乎用presentModalViewController:
新指令替换不推荐使用的指令也presentViewController:animated:completion:
不能解决问题。