我有一个问题 - 我在尝试设置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事件.
我做错了什么?
错误不在您发布的代码中.你的僵尸消息说你的引用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(但是在解决问题后要担心)
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |