1

まず第一に、私は本当にあなたの助けに感謝します。

ええと、私は2つのビューで共通の3つのNSStringオブジェクトを使用します。そして、これらのビューはEmbedded NavigationControllerによって設定されています。つまり、SingleViewでプログラミングを開始します。

AppDelegate.hで、私は書きます

@property (weak, nonatomic) NSString    *crntURL;

@property (weak, nonatomic) NSString    *crntTitle;

@property (weak, nonatomic) NSString    *crntHTML;

委任のため。

そして最初のビューでは、私はウェブビューを持っていて、

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    NSString    *url = [[NSString alloc] initWithString:[myWebView     stringByEvaluatingJavaScriptFromString:@"document.URL"]];
    NSString    *title = [[NSString alloc] initWithString:[myWebView stringByEvaluatingJavaScriptFromString:@"document.title"]];
    NSString    *html = [[NSString alloc] initWithString:[myWebView stringByEvaluatingJavaScriptFromString:@"document.all[0].outerHTML"]];
    appDelegate.crntTitle = nil;
    appDelegate.crntTitle = [[NSString alloc] initWithString:title];
    appDelegate.crntHTML = nil;
    appDelegate.crntHTML = [[NSString alloc] initWithString:html];
    appDelegate.crntURL = nil;
    appDelegate.crntURL = [[NSString alloc] initWithString:url];
}

ここで、NSLogを配置すると、予期されたHTMLソースコードがダンプされます。

そして、2番目のビュー(UIViewControllerのサブクラス)では、次のように記述します。

- (void)viewDidLoad
{
    // Do any additional setup after loading the view.
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    sourceHTML.text = appDelegate.crntHTML;
    NSLog( @"%@", appDelegate.crntHTML );
    NSLog( @"%@", appDelegate.crntURL );
    NSLog( @"%@", appDelegate.crntTitle );
    [super viewDidLoad];
}

また、crntURLとcrntTitleが値を保持している間、crntHTMLのみが予期せずnullに設定されます。

あなたはなにか考えはありますか?

前もって感謝します。

マサル

4

1 に答える 1

1

アプリデリゲートでプロパティを弱いと宣言しました。ARCを使用すると、オブジェクトへの強い参照がない場合、オブジェクトが解放され、nilに設定されます。

最初のViewControllerからtitleとURL変数を参照していると想像できますが、HTML変数は2番目のViewControllerでのみ参照されています。2番目のコントローラーでHTMLを表示する準備ができたら、アプリデリゲートがHTMLを保持していないため、既にリリースされています。

アプリデリゲートのプロパティ宣言をstrongに変更してみてください。

@property (strong, nonatomic) NSString *crntURL;
@property (strong, nonatomic) NSString *crntTitle;
@property (strong, nonatomic) NSString *crntHTML;
于 2012-07-06T20:06:26.260 に答える