通过PrepareForSegue传递数据的麻烦

时间:2013-07-10 04:02:13

标签: ios objective-c webview

我正在尝试使用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

问题是我的网址为空。有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你一定会遇到prepareForSegue这种麻烦。 我建议您在源代码中保留强大的数据实例:

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

然后在prepareForSegue中只执行此操作:

destViewController.url = tempURL;

我以前经历过类似的问题,这似乎解决了它。我没有清楚说明原因。