0

我正在尝试webViewController使用该prepareForSegue方法将数据传递给 a,如下所示:

-(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

问题是我的 URL 为空。有人能告诉我为什么吗?

4

2 回答 2

1

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

于 2013-07-10T04:33:23.333 回答
0

使用prepareForSegue 肯定会遇到这种麻烦。我建议您将要在源中传递的数据的强实例保留为:

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

然后在 prepareForSegue 中只这样做:

destViewController.url = tempURL;

我以前也遇到过类似的问题,这似乎解决了它。我对这其中的原因没有清晰的认识。

于 2013-07-10T04:11:25.380 回答