1

首先,我真的很感谢你的帮助。

好吧,我在两个视图中共同使用了三个 NSString 对象。这些视图由 Embedded NavigationController 提供,我的意思是我开始使用 SingleView 进行编程。

在 AppDelegate.h 中,我写

@property (weak, nonatomic) NSString    *crntURL;

@property (weak, nonatomic) NSString    *crntTitle;

@property (weak, nonatomic) NSString    *crntHTML;

为委派。

在第一个视图中,我有一个 webview 并写

-(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 源代码。

在第二个视图(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];
}

只有 crntHTML 意外设置为 null 而 crntURL 和 crntTitle 保留值。

你有什么想法?

先感谢您。

4

1 回答 1

1

您已将应用程序委托中的属性声明为弱。使用 ARC,如果没有强引用,对象将被释放并设置为零。

我可以想象您正在从第一个视图控制器引用标题和 URL 变量,但 HTML 变量仅在第二个视图控制器中引用。一旦你准备好在第二个控制器中显示 HTML,它就已经发布了,因为应用程序委托没有保留它。

尝试将应用委托中的属性声明更改为强:

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