4

我遇到了一个问题 - 尝试设置 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

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

所以,如果我正在处理委托字符串 - 一切正常,但我没有收到我的 webViewDidFinishLoad 事件。

我做错了什么?

4

1 回答 1

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];

附带说明一下,约定说我们应该以大写字母开头类名,因此您可以命名该类VkLogin,这将使其易于与命名的变量区分开来vkLogin(但在解决问题后要担心)

于 2012-09-06T16:44:12.397 回答