2011-09-14 10 views
0

最初に、私は完全なnoobですので、説明するときは控えてください。最初のビューコントローラにWebページ(UIWebview)をロードするプログラムがあります。最初のView Controllerは、NSUserDefaultsにUserNameの "jdoe1234"が含まれているかどうかを確認します。そうであれば、最初のWebページをロードします。何か違う場合は、2番目のWebページをロードします。私はまた、2番目のビューコントローラにフリップする情報ボタンを持っています。NSUserDefaults 2つのView Controller間で

2番目のビューコントローラでは、ユーザーがユーザー名とパスワードを入力し、[完了]ボタンをクリックして最初のコントローラビューに戻すことができます。完了ボタンのコードの中で、NSUserDefaultsを更新して、ユーザー名とパスワードのテキストボックス値を含めます。

私の問題は、人が最初のView Controllerに戻ってきたときに、その人がちょうど入力して保存した値でWebページがリフレッシュされていないことです。プログラムを閉じてもう一度開くと、新しい値が正しく表示されます。私はさまざまな例を検索して試しましたが、それを動作させることができません。私は下に私のコードを記載している。私はこれに関する助けに感謝します。

FirstViewController.h 
#import <UIKit/UIKit.h> 
#import "SecondViewController.h" 


@interface FirstViewController : UIViewController { 

    IBOutlet UIWebView *loadInitialGradebook; 
    IBOutlet UILabel *labelUserName; 

} 

- (IBAction)infoButtonPressed:(id)sender; 
-(IBAction)refreshWebView; 
@property (nonatomic, retain) UILabel *labelUserName; 
@end 

FirstViewController.m 
#import "FirstViewController.h" 
#import "SecondViewController.h" 


@implementation UACCHViewController 
@synthesize labelUserName; 


- (IBAction)infoButtonPressed:(id)sender; 
{ 
    SecondViewController *second = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 

    second.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;  
    [self presentModalViewController:second animated:YES]; 
} 

- (IBAction)refreshWebView { 

    [loadInitialWebView reload]; 
}   



// Start Strip URL of spaces & funky characters 
- (NSString *)urlEncodeValue:(NSString *)str 
{ 
    NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR("?=&+"), kCFStringEncodingUTF8); 
return [result autorelease]; 
} 
// End Strip URL of spaces & funky characters 



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 

    labelUserName.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"txtFieldUserName"]; 

    // Start Load WebView 

    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"txtFieldUserName"]) { 

    [loadInitialWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];   
    } 
    else {  

    NSString *post = [NSString stringWithFormat:@"username=%@&password=%@",[self urlEncodeValue:[[NSUserDefaults standardUserDefaults] stringForKey:@"txtFieldUserName"]],[self urlEncodeValue:[[NSUserDefaults standardUserDefaults] stringForKey:@"txtFieldPassWord"]]];      

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:@"http://www.mysite.com/page.php"]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 

    [loadInitialWebView loadRequest: request]; 

} 
// End Load WebView 



[super viewDidLoad]; 
} 

@end 

SecondViewController.h 

#import <UIKit/UIKit.h> 

NSUserDefaults *prefs; 

@interface SecondViewController : UIViewController { 

    IBOutlet UITextField *txtUserName; 
    IBOutlet UITextField *txtPassWord; 

} 

@property (nonatomic, retain) UITextField *txtUserName; 
@property (nonatomic, retain) UITextField *txtPassWord; 
@property (nonatomic, retain) NSUserDefaults *prefs; 

- (IBAction)doneButtonPressed:(id)sender; 


@end 

SecondViewController.m 

#import <UIKit/UIKit.h> 
#import "SecondViewController.h" 


@implementation SecondViewController 
@synthesize txtUserName; 
@synthesize txtPassWord; 
@synthesize prefs; 


// Start Done Button Pressed 
- (IBAction)doneButtonPressed:(id)sender; 
{  
    [self dismissModalViewControllerAnimated:YES]; 

    [prefs setObject:txtUserName.text forKey:@"txtFieldUserName"]; 
    [prefs setObject:txtPassWord.text forKey:@"txtFieldPassWord"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

} 
// End Done Button Pressed 


// Start Dismiss the keyboard when a user selects the return key 
- (BOOL) textFieldShouldReturn: (UITextField *) theTextField 
{ 
[theTextField resignFirstResponder]; 

return YES; 
} 
// End Dismiss the keyboard when a user selects the return key 

- (void)viewDidLoad 
{ 
    self.prefs = [NSUserDefaults standardUserDefaults]; 


//Start (Code to set a default username,password) 

    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"txtFieldUserName"]) { 

     txtUserName.text = @"jdoe1234"; 
    } 
    else { 
     txtUserName.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"txtFieldUserName"]; 
    } 

    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"txtFieldPassWord"]) { 

     txtPassWord.text = @"01012011"; 
    } 
    else { 
     txtPassWord.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"txtFieldPassWord"]; 
    }   

    // End (Code to set a default username,password) 

[super viewDidLoad]; 
// Do any additional setup after loading the view from its nib. 

} 
@end 

答えて

0

ビューがすでにロードされていて、再ロードされていないので、それはおそらく、最初のページにロードされていません。最初のView Controllerで-viewWillAppearに何かを追加して、NSUserDefaultsを再チェックして適切にロードする必要があります。

関連する問題