更新两个视图控制器之间的NSUserDefaults

时间:2011-09-14 18:35:15

标签: iphone uiviewcontroller nsuserdefaults

首先,我是一个完整的菜鸟,所以请在解释时保持温柔。我有一个程序在第一个视图控制器上加载网页(UIWebview)。第一个视图控制器检查NSUserDefaults是否包含UserName的“jdoe1234”。如果是,则加载第一个网页,如果它有不同的东西,则会加载第二个网页。我还有一个信息按钮,可以翻转到第二个视图控制器。

在第二个视图控制器上,一个人可以输入用户名和密码,然后单击“完成”按钮,将其翻转回第一个控制器视图。在完成按钮代码中,我正在更新NSUserDefaults以包含用户名和密码文本框值。

我的问题是当这个人翻回第一个视图控制器时,网页没有刷新该人刚输入并保存的值。当我关闭程序并再次打开它时,新值显示正确。我搜索并尝试了不同的例子,但我无法让它工作。我在下面列出了我的代码。我对此表示感谢。

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

1 个答案:

答案 0 :(得分:0)

它可能没有加载到第一页,因为视图已经加载并且没有被重新加载。您需要在第一个视图控制器中向-viewWillAppear添加一些内容,以重新检查NSUserDefault并正确加载它们。