Не удается загрузить страницу в UIWebView - PullRequest
0 голосов
/ 30 декабря 2010

Я разрабатываю приложение новостей, которое получает контент из RSS-ленты.Когда я нажимаю на TableViewCell, я передаю объект NSDictionary с заголовком, ссылкой и т. Д. Следующему ViewController.В ViewController я определяю NSDictionary * item;и я могу убедиться, что значения переданы правильно, установив заголовок viewcontroller следующим образом: self.title = [item objectForKey: @ "link"];заголовок показывает ссылку, которую я пытаюсь открыть в моем UIWebView.

Вот реализация моего ViewController

    //
//  NewsDetailViewController.m
//  NewsApp2
//
//  Created by Marco Soria on 12/27/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//

#import "NewsDetailViewController.h"


@implementation NewsDetailViewController

@synthesize item, itemTitle, itemDate, itemSummary;

-(id)initWithItem:(NSDictionary *)theItem{
    if(self = [super initWithNibName:@"NewsDetail" bundle:[NSBundle mainBundle]]){
        self.item = theItem;
        self.title = [item objectForKey:@"link"];
    }

    return self;
}

// The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
/*
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization.
    }
    return self;
}
*/


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

    NSString *urlAddress = [self.item objectForKey:@"link"]; 

    NSURL *baseURL = [[NSURL URLWithString: urlAddress] retain];        

    NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];

    [self.itemSummary loadHTMLString:urlAddress baseURL:nil];
    [self.itemSummary loadRequest:request];

    [baseURL release];
}


/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations.
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];

}


@end

Теперь, когда я назначаю адрес, подобный этому @"http://somesite.com", UIWebView загружается очень хорошоно когда я делаю это: NSString *urlAddress = [self.item objectForKey:@"link"]; он никогда не загружается.Как я уже упоминал, я проверил, что значение [self.item objectForKey:@"link"]; является действительным URL-адресом, поскольку оно отображается в заголовке панели навигации.

, если я делаю это: [self.itemSummary loadHTMLString: urlAddress baseURL: nil];UIWebView отображает URL-адрес, еще один способ проверить, что urlAddress имеет правильный URL-адрес.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010

Это решено, я сделал

NSURL *baseURL = [[NSURL URLWithString: [urlAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] retain]; 

и работает сейчас, по-видимому, я отправлял несколько пробелов после URL-адреса, и именно поэтому это не был действительный URL-адрес, даже если он был действительным.Я NSLog и получил baseUrl http://site.com/item.php?id=2458%20%0A%09%20%20%20%20%20%20%20%20%09%20%20%20%20%09%09%09%09

0 голосов
/ 30 декабря 2010

Где вы присваиваете self.title с [item objectForKey:@"link"]?

Вы добавили item в качестве свойства вашего контроллера представления в ваш файл .h?Если в вашем методе viewDidLoad, который вы указали выше, у вас его нет, у вас не будет доступа к self.item.

В вашем файле .h:

@interface MyViewController : UIViewController {
    NSDictionary *item;
}
@property (nonatomic, readwrite, retain) NSDictionary *item;

В вашем.m-файл (настройте его в соответствии с вашим методом init):

-(id)initWithItem:(NSDictionary *)item {
    if (self = [super initWithNibName: nil bundle: nil]) {
        self.item = item;   
    }
    return self;
}

После того, как вы это сделаете, у вас будет глобальный доступ в методах вашего контроллера представления к свойству item через self.item.

...