最初に、私は完全な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