我正在尝试使用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
问题是我的网址为空。有人可以告诉我为什么吗?
答案 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;
我以前经历过类似的问题,这似乎解决了它。我没有清楚说明原因。