2013-03-26 23 views
0

的ViewController:傳遞NSString的視圖之間,viewDidLoad中之前

  • 初始視圖控制器
  • 包含按鈕切換到SettingsViewController
  • 包含UIWebView的具有初始網頁URL(值: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'

問題 如何檢索在UIWebView的應用程序加載的時候了加載設定的NSString值homepageURL?換句話說,充當主頁。我無法獲得此代碼的工作。

+0

你需要使用協議.. :) – iPatel 2013-03-26 17:53:54

回答

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

可以使用NSUserDefault在SettingsViewController節省homepageURL,然後把它在你的ViewController任何時候,當你想

設置使用

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

,並獲得

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