ViewController:


初始视图控制器
包含按钮以切换到SettingsViewController
包含具有初始主页URL的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中? -换句话说,充当主页。我无法使此代码正常工作。

最佳答案

您需要创建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上写出更改。

关于iphone - 在ViewDidLoad之前,在 View 之间传递NSString,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15643811/

10-10 20:51