从UITableView传递URL时,UIWebView不加载URL

时间:2010-03-17 19:51:15

标签: iphone objective-c uitableview uiwebview

所以我正在我的应用程序中构建一个webView,以显示我从UITableView中的选择传递的URL的内容。我知道UIWebView正在正确加载内容,因为如果你硬编码说http://www.google.ca到NSURL然后它加载正常,但是当我传递我从UITableView从RSS反馈解析的URL时它不会正确加载URL。我尝试了调试器,在我尝试解析它之前,URL就是nil,但是我可以使用NSLog将它的值打印到控制台。

这是我的UIViewController中有我的UIWebView

的代码
 #import <UIKit/UIKit.h>


@interface ReadFeedWebViewController : UIViewController 
{
    NSString *urlToGet;
    IBOutlet UIWebView *webView;
}

@property(nonatomic, retain) IBOutlet UIWebView *webView;
@property(nonatomic, retain) NSString *urlToGet;

@end

这是我的实现的viewDidLoad方法的代码...

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad 
{
    [super viewDidLoad];

    NSLog(@"Url inside Web View Controller - %@", urlToGet);
    NSURL *url = [NSURL URLWithString:urlToGet];

    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [self.webView loadRequest:requestObj];
}

再次,我可以将URL打印到NSLog,如果我将URL硬编码到NSURL对象中,那么它将在UIWebView中正常加载。这是我在UITableViewController中设置值的地方......

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{   
    ReadFeedWebViewController *extendedView = [[ReadFeedWebViewController alloc] init];

    int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
    extendedView.urlToGet = [[stories objectAtIndex: storyIndex] objectForKey:@"link"];
    //NSLog([[stories objectAtIndex: storyIndex] objectForKey:@"summary"]);
    NSLog([[stories objectAtIndex: storyIndex] objectForKey:@"link"]);

    [self.navigationController pushViewController:extendedView animated:YES];

    [extendedView release];
}

但是,由于我可以在extendedView视图控制器中使用NSLog打印该值,因此我知道它正在正确传递。干杯

3 个答案:

答案 0 :(得分:5)

urlToGet在viewDidLoad方法中的ReadFeedWebViewController中为null,因为调用此方法时此变量尚未受影响。 ViewController初始化完成后调用viewDidLoad。 我应该在viewWillAppear方法中调用它:

- (void)viewWillAppear:(BOOL)animated {
    NSURL *url = [NSURL URLWithString:urlToGet];

    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [self.webView loadRequest:requestObj];
}

答案 1 :(得分:1)

此外,代码中存在内存泄漏。在导航控制器上按下后,您应该释放extendedView

ReadFeedWebViewController *extendedView = [ReadFeedWebViewController new];
if (extendedView != nil) {
    ... setup extendedView here ...
    [self.navigationController pushViewController:extendedView animated:YES];
    [extendedView release];
}

答案 2 :(得分:0)

Try this
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                        timeoutInterval:20.0];