在ViewDidLoad之前在视图之间传递NSStrings

时间:2013-03-26 17:37:37

标签: iphone ios objective-c uiwebview

ViewController:

  • 初始视图控制器
  • 包含切换到SettingsViewController的按钮
  • 包含带有初始主页网址的UIWebView(值:homepageURL = NSString)

SettingsViewController:

  • 充当应用的“设置”部分
  • 包含UITextField:homepageField(默认值:http://google.com/
  • UITextField值:homepageURL

ViewController.h

#import SettingsViewController.h

@interface ViewController : UIViewController <UIWebViewDelegate> {
    UIWebView *webView;
}

@property (nonatomic, retain) IBOutlet UIWebView *webView;

@end

ViewController.m

@synthesize webView;

- (void)viewDidLoad {
    [super viewDidLoad];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:homepageURL]]];
}

SettingsViewController.h

#import "ViewController.h"

@interface SettingsViewController : UITableViewController <UITextFieldDelegate> {
    UITextField *homepageField;
    NSString *homepageURL;
}

@property (nonatomic, retain) IBOutlet UITextField *homepageField;
@property (nonatomic, retain) NSString *homepageURL;

SettingsViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *homepageURL = homepageField.text;
}

错误

ViewController.m:[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:homepageURL]]]; - Use of undeclared identifier 'homepageURL'

问题 当应用程序加载时,如何检索设置的NSString值homepageURL以便在UIWebView中加载? - 换句话说,充当主页。我无法使这段代码正常工作。

2 个答案:

答案 0 :(得分:1)

您需要创建一个SettingsViewController实例才能获取字符串。它不是从xib / storyboard自动加载的,因为它不是初始/根视图控制器。如果从故事板加载,你应该给它的场景一个故事板ID(比如说“settingsVC”),这样你就可以访问它,然后

SettingsViewController* settingsVC =  
      [self.storyboard instantiateViewControllerWithIdentifier:@"settingsVC"];

然后你可以:

      [webView loadRequest:[NSURLRequest requestWithURL:
                [NSURL URLWithString:settingsVC.homepageURL]]];

然而这是一种存储默认字符串的非常糟糕的方式,因为您必须加载整个故事板场景才能获得该值。有许多更好的方法来存储数据。例如,这只是NSUserDefaults有用的东西:

    NSString* homePageURL;
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

      //reading
    homepageURL = [defaults stringForKey:@"homepageURLKey"];

      //writing
    [defaults setString:homepageURL forKey:@"homepageURLKey"];

NSUserDefaults管理持久数据,因此在您的应用启动之间会保留所有更改。

由于这是一个默认字符串,如果userDefaults中没有保存的字符串,您可以在初始viewController的viewDidLoad中设置它。您的设置viewController可以配置为从viewDidLoad / viewWillAppear上的NSUserDefaults读取数据,并在viewWillDisappear上和/或{{1}}上写出更改。

答案 1 :(得分:1)

你可以使用NSUserDefault在SettingsViewController中保存homepageURL,然后随时在你的ViewController中获取它

设置使用

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:homepageField.text forKey:@"homepageURL"];

并获得

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *homepageURL = [defaults objectForKey:@"homepageURL"];