UIWebView委托中的EXC_BAD_ACCESS

Dan*_*nny 4 objective-c ios

我有一个问题 - 我在尝试设置UIWebView.delegate = self时得到了EXC_BAD_ACCESS;

我的代码:

vkLogin.h -

#import UIKit/UIKit.h

@interface vkLogin : UIViewController <UIWebViewDelegate>
{
    UIWebView *authBrowser;
    UIActivityIndicatorView *activityIndicator;
}

@property (nonatomic, retain) UIWebView *authBrowser;
@property (nonatomic, retain) UIActivityIndicatorView *activityIndicator;

@end
Run Code Online (Sandbox Code Playgroud)

vkLogin.m -

#import "vkLogin.h"
#import "bteamViewController.h"

@implementation vkLogin

@synthesize authBrowser;

- (void) viewDidLoad
{
    [super viewDidLoad];

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    activityIndicator.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);
    activityIndicator.autoresizesSubviews = YES;
    activityIndicator.hidesWhenStopped = YES;

    [self.view addSubview: activityIndicator];
    [activityIndicator startAnimating];

    authBrowser = [[UIWebView alloc] initWithFrame:self.view.bounds];

    authBrowser.delegate = self;
    authBrowser.scalesPageToFit = YES;

    [self.view addSubview:authBrowser];

    NSString *authLink = @"http://api.vk.com/oauth/authorize?client_id=-&scope=audio&redirect_uri=http://api.vk.com/blank.html&display=touch&response_type=token";
    NSURL *url = [NSURL URLWithString:authLink];

    [authBrowser loadRequest:[NSURLRequest requestWithURL:url]];

}

- (void) webViewDidFinishLoad:(UIWebView *)authBrowser
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Lol" message:@"OLOLO" delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];

    [alert show];

}
@end
Run Code Online (Sandbox Code Playgroud)

所以,如果我赞成委托字符串 - 一切正常,但我没有收到我的webViewDidFinishLoad事件.

我做错了什么?

DBD*_*DBD 5

错误不在您发布的代码中.你的僵尸消息说你的引用vkLogin很糟糕.因此,您需要查看任何类创建并保留对您的vkLogin类的引用.

那堂课应该像做一样 vkLogin *foo = [[vkLogin alloc] init];

更新:

根据您的评论,您似乎正在为其创建局部变量vkLogin.看到代码创建和使用vkLogin以及如何调用它将是最有用的.除此之外,这里有一些猜测.

您被称为vkLogin多次创建和添加到子视图的方法.(每次都会创建一个新实例).你有一些回调,可以在vkLogin被删除后发生.

我的猜测vkLogin应该是property你的班级,而不是本地方法变量.

在你的.h你会添加 @proprerty (strong, nonatomic) vkLogin *vk;

在您的.m文件中,您可以引用它,self.vk因此您可以创建它并将其添加为子视图,如:

self.vk = [[vkLogin alloc] init]; 
[self.view addSubview:self.vk];
Run Code Online (Sandbox Code Playgroud)

在旁注中,约定说我们应该用大写字母开始类名,所以你要命名这个类VkLogin,它可以很容易地与命名的变量区分开来vkLogin(但是在解决问题后要担心)