2010-12-29 7 views
0

Ich entwickle eine Nachrichten App, die den Inhalt von einem RSS Feed erhält. Wenn ich auf eine TableViewCell klicke, übergebe ich ein NSDictionary-Objekt mit dem Titel, Link usw. an den nächsten ViewController. Im ViewController definiere ich NSDictionary * item; und ich kann überprüfen, dass die Werte korrekt übergeben werden, indem Sie den Titel des Viewcontrollers wie folgt festlegen: self.title = [item objectForKey: @ "link"]; Der Titel zeigt den Link, den ich in meinem UIWebView öffnen möchte.Kann eine Seite in einem UIWebView nicht laden

Hier ist die Umsetzung meiner 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 

Nun, wenn ich die Adresse wie diese @"http://somesite.com" die Lasten UIWebView zuweisen nur gut, aber wenn ich dies tun: NSString *urlAddress = [self.item objectForKey:@"link"]; es nie Lasten. Wie ich bereits erwähnt habe, habe ich überprüft, dass der Wert [self.item objectForKey:@"link"]; eine gültige URL ist, seit sie im Titel der Navigationsleiste angezeigt wird.

Wenn ich dies tue: [selb.itemSummary loadHTMLString: URLAddress baseURL: nil]; Das UIWebView zeigt die URL an, eine weitere Möglichkeit zu überprüfen, ob URLAddress die richtige URL hat.

Was mache ich falsch?

+0

Zeigen Sie den Code, wo Sie den neuen View-Controller erstellen und übergeben Sie den Artikel. Zeigen Sie den gesamten Code genau so an, wie Sie ihn haben. Sie können Ihre Frage hier einfach bearbeiten und diesen Code an das Ende hinzufügen. –

+0

Das Anzeigen als Titel in der Navigationsleiste ist nicht unbedingt der Nachweis einer gültigen URL. Wenn Sie NSLoggen (oder einen Haltepunkt setzen und es po), wie sieht es aus? –

+0

I NSLog und festgestellt, dass baseURL Null zurückgibt, aber URL Address hat eine "gültige" URL, also wenn ich tun NSURL * baseURL = [[NSURL URLWithString: URL Address] behalten]; baseURL wird nicht richtig initialisiert, vielleicht muss etwas mit der Kodierung gemacht werden? –

Antwort

0

Wo weisen Sie self.title mit [item objectForKey:@"link"] zu?

Haben Sie item als eine Eigenschaft Ihres View-Controllers in Ihrer .h-Datei hinzugefügt? Wenn Sie nicht in Ihrer viewDidLoad Methode, die Sie oben gepostet haben, haben Sie keinen Zugriff auf self.item.

In Ihrer .h-Datei:

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

In .m-Datei (justieren dies Ihr init-Methode entsprechen):

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

Nachdem Sie tun, dass Sie den globalen Zugriff haben in Ihrem View Controller-Methoden zu item Eigenschaft über self.item.

+0

Hallo Calvin, wie ich oben erwähnt habe, habe ich getan, was Sie mich gerade gefragt, das Problem scheint zu sein, dass baseURL nicht richtig initialisiert wird, obwohl URL Address eine gültige URL hat –

Verwandte Themen