1

私は iOS が初めてで、サイドバー ドロワーとシンプルなナビゲーションを備えた WebView ベースのアプリを作成しようとしています (MFSideMenu ライブラリを使用しています)。Webview で URL を読み込むことができます。

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIWebViewDelegate>{
    UIWebView *webView;
}

@property (retain, nonatomic) IBOutlet UIWebView *webView;
- (IBAction)showLeftMenuPressed:(id)sender;
- (void) loadURL;
@property (nonatomic, strong) NSURL *url;

@end

ViewController.m

#import "ViewController.h"
#import "MFSideMenu.h"

@interface ViewController ()
- (void)webViewDidFinishLoad:(UIWebView *)webView;
@end

@implementation ViewController
@synthesize webView;
@synthesize url;

- (void)viewDidLoad
{
    [super viewDidLoad];
    webView.delegate=self;

    if(self.url == Nil) {
        NSString *myURL = @"http://google.com/";
        self.url = [NSURL URLWithString:myURL];
    }

    [self loadURL];
}

-(void)loadURL{
    NSLog(@"loadURL: %@", self.url);
    [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
}

次のコードを使用して新しい URL を読み込もうとすると、正しい URL パラメータ値を受け取ります。もう 1 つのコントローラーはサイドバー (ドロワー) テーブルビューで、メイン ビュー (webview を含む ViewController) に表示される URL を変更する項目を選択しています。

別のコントローラー:

ViewController *webViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
NSString *urlString = @"http://kirk.kh.ua/";
NSString *encodedString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:encodedString];
webViewController.url = url;
//[self.navigationController pushViewController:webViewController animated:YES];
[webViewController loadURL];
[webViewController release];

コメント行があることに気付くかもしれません - 私はこの解決策を試しましたが、結果は同じです: 別のコントローラでコードを呼び出しているとき、ログ出力で loadURL メソッドがと呼ばれ、正しい URL (kirk.kh.ua) が表示されます。


UPD :最初に WebView をオブジェクトとしてロードすると、null のように見えることに気付きました (ログを参照):

最初の読み込み後に webview が null になる

UPD2:別のクラスから呼び出しているときに webivew オブジェクトと他の合成オブジェクトが null であることに気付きましたが、このオブジェクトは存在し、自己 (ViewController) コントローラーからログに記録しているときにアクセスできます。

別のクラスからViewControllerクラスオブジェクトにアクセスする方法を誰かが提案できますか?

4

1 に答える 1