2013-07-10 43 views
0

我试图通过使用prepareForSegue方法数据到webViewController,它看起来像:故障传递数据通过PrepareForSegue

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:@"RBOM"]) 
    { 
     WebViewController *destViewController = segue.destinationViewController; 
     destViewController.url = [NSURL URLWithString:@"https:myURL.com/Articles.asp?ID=274"]; 
    } 
    if([segue.identifier isEqualToString:@"Home"]) 
    { 
     WebViewController *destViewController = segue.destinationViewController; 
     destViewController.url = [NSURL URLWithString:@"http://www.myURL.com"]; 
    } 
} 

这是为什么我webViewController类的样子:

#import "WebViewController.h" 

@interface WebViewController() 

@end 

@implementation WebViewController 
@synthesize webView; 
@synthesize url; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController setNavigationBarHidden:NO]; 
    self.title = @"MyURL.com"; 
    self.webView.delegate = self; 
    NSLog(@"URL: %@", self.url); <---- This is null 


    NSURLRequest *requestURL = [NSURLRequest requestWithURL:url]; 
    [self.webView loadRequest:requestURL]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

@end 

这里是webViewController.h

#import <UIKit/UIKit.h> 

@interface WebViewController : UIViewController <UIWebViewDelegate> 
@property (weak, nonatomic) IBOutlet UIWebView *webView; 
@property (weak, nonatomic) NSURL *url; 



@end 

T他的问题是我的网址为空。有人能告诉我为什么吗?

+0

你的url属性是如何声明的?强大?弱? –

+0

弱,看到更新的代码。 – BlackHatSamurai

+0

@NicholasHart,你修好了!如果你添加这个答案,我会接受。 – BlackHatSamurai

回答

1

对于您的UI元素,通常可以声明它们较弱,因为您的视图会保留它们。对于其他ivars,您希望将它们声明为强大的,以便您的类实例将保留它们。在这个特殊情况下,你的url属性很弱,所以NSURL没有被保留,并且在prepareForSegue:范围消失之后被设置为零。

+1

我基本上说过同样的事情:( – JohnVanDijk

0

你一定会遇到prepareForSegue这种麻烦。 我建议你把你想在你的源传递的数据的强劲实例:

NSURL *tempURL = [NSURL URLWithString:@"https:myURL.com/Articles.asp?ID=274"]; 

然后在prepareForSegue只能这样做:

destViewController.url = tempURL; 

我以前也遇到过类似的问题,这似乎解决了它。我对这个原因没有清晰的描述。