0

Safari ブラウザへの uiwebview のリンクを開きたいのですが、viewController に shouldStartLoadWithRequest メソッドを実装すると、コードは完全に機能しますが、同じクラスに shouldStartLoadWithRequest を実装し、UIWebView のデリゲートを自分自身に設定すると、機能しません。エラーEXC_BAD_ACCESS(コード= 2、アドレス= 0x9)のアセンブリレベルコード 私のファイルは次のとおりです

//ShowView.h ファイルの内容

#import <UIKit/UIKit.h>
@interface ShowView : UIView <UIWebViewDelegate> {

}

- (void) showViewFunction;

@property (nonatomic, assign) UIViewController *mainViewContObj;

@end

//ShowView.m ファイルの内容は次のとおりです。

#import "ShowView.h"

@implementation ShowView

- (void) showViewFunction {

    UIWebView *aWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 150)];
    aWebView.autoresizesSubviews = YES;
    aWebView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
    [aWebView setDelegate:self];
    NSString *urlAddress = @"http://localhost/test/index.php";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    aWebView.delegate = self;
    [aWebView loadRequest:requestObj];
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    [[[self mainViewContObj] view] addSubview:aWebView];
}



- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {

    NSLog(@"In shouldStartLoadWithRequest method");

    if ([[[request URL] absoluteString] isEqual:@"http://localhost/test/index.php"])
        return YES;

    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}


@end

// ViewController.h の内容

#import "ViewController.h"
#import "ShowView.h"

@interface mnetViewController ()

@end

@implementation mnetViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    MNETMobAd *bannerObj = [[MNETMobAd alloc] init];
    bannerObj.mainViewContObj = self;    
    [bannerObj showAd];

}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

時々 html ページが表示されますが、リンクをクリックすると同じ UIWebview ウィンドウで開き、shouldStartLoadWithRequest メソッドにすら入っていません。何か問題がありますか?

4

1 に答える 1

0

あなたのコードは明確ではなく、さらに情報が必要な場合がありますが、私が見たところ、ShowView クラスはインスタンス化されていないため、表示することさえできません。

あなたは私が推測するこのようなものを作るべきです:

//mnetViewController.m

    #import "mnetViewController.h"
    #import "ShowView.h"

    @interface mnetViewController ()

    @end

    @implementation mnetViewController

    - (void)viewDidLoad {
        [super viewDidLoad];

    ShowView* theShowView = [[ShowView alloc] initWithFrame:CGRectMake(insert the frame you want your webview to have)];
theShowView.autoresizesSubviews = YES;

    [self.view addSubview:theShowView];
    [theShowView release];

        MNETMobAd *bannerObj = [[MNETMobAd alloc] init];
        bannerObj.mainViewContObj = self;    
        [bannerObj showAd];

    }

ShowView クラスについては、次のようにしてみてください。

//ShowView.h

#import <UIKit/UIKit.h>
@interface ShowView : UIView <UIWebViewDelegate> {

}
@end

//ShowView.m

#import "ShowView.h"

@implementation ShowView

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
    if (self) 
    {
 UIWebView *aWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];

    aWebView.scalesPageToFit = YES;
    [aWebView setDelegate:self];
[self addSubview:aWebView];    

NSString *urlAddress = @"http://localhost/test/index.php";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [aWebView loadRequest:requestObj];

[aWebView release];
}
    return self;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {

    NSLog(@"In shouldStartLoadWithRequest method for URL : %@",[request [URL absolutString]]);

    if ([[[request URL] absoluteString] isEqual:@"http://localhost/test/index.php"])
        return YES;

    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

これはうまくいくはずです。私は試していません。明日、必要に応じて試してみます。

于 2012-11-20T17:20:18.960 に答える