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これは、subViewを複数回作成して追加するメソッドと呼ばれます。(毎回新しいインスタンスが作成されます)。削除された後に発生する可能性のある、ある種のコールバックがあります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 に答える