Iphone 保存用户名&;首次登录后的密码,不再询问
我正在开发一个ios应用程序,我需要输入公司代码和accesscode才能登录。在第一次使用访问码登录之后,我们不希望在打开应用程序时再次请求访问码。我的意思是我需要保存首选项 我的代码在这里Iphone 保存用户名&;首次登录后的密码,不再询问,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我正在开发一个ios应用程序,我需要输入公司代码和accesscode才能登录。在第一次使用访问码登录之后,我们不希望在打开应用程序时再次请求访问码。我的意思是我需要保存首选项 我的代码在这里 - (IBAction)loginClicked:(id)sender { @try { if([[txtsecurecode text] isEqualToString:@""] || [[OrganizationCode text] isEqualToString:@""] ) {
- (IBAction)loginClicked:(id)sender {
@try {
if([[txtsecurecode text] isEqualToString:@""] || [[OrganizationCode text] isEqualToString:@""] ) {
[self alertStatus:@"Please enter Access code" :@"Login Failed!":0];
} else {
NSString *post =[[NSString alloc] initWithFormat:@"txtsecurecode=%@ @&password=%@",[txtsecurecode text],[OrganizationCode text]];
NSLog(@"PostData: %@",post);
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://mycompany.com/AccountService/security/ValidateAccess?accesscode=%@&companycode=%@&type=1", txtsecurecode.text, OrganizationCode.text]];
[[ NSUserDefaults standardUserDefaults] setValue:OrganizationCode forKey:@"OrganizationCode"];
[[ NSUserDefaults standardUserDefaults] setValue:txtsecurecode forKey:@"txtsecurecode"];
[[NSUserDefaults standardUserDefaults] synchronize];
txtsecurecode = [[NSUserDefaults standardUserDefaults] objectForKey:@"txtsecurecode"];
OrganizationCode = [[NSUserDefaults standardUserDefaults] objectForKey:@"OrganizationCode"];
// NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"txtsecurecode"];
NSString *responseData = [[NSString alloc]initWithData:[NSData dataWithContentsOfURL:url] encoding:NSUTF8StringEncoding];
if([responseData isEqualToString:@""]){
[self alertStatus:@"Please enter valid Access Code" :@"Login Failed !" :0];
}
else
{
responseData = [responseData stringByReplacingOccurrencesOfString:@" "" " withString:@""];
responseData = [responseData stringByReplacingOccurrencesOfString:@"\\" withString:@""];
NSString* encodedString = [responseData stringByReplacingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];
NSLog(@"Response ==> %@" ,encodedString);
UIWebView *webView;
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0, 320, 470)];
webView.backgroundColor = [UIColor clearColor];
webView.opaque = NO;
[webView setDelegate:self];
NSString* urlTwo = [[encodedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
stringByReplacingOccurrencesOfString:@"%22" withString:@""];
NSURL *url2;
if([urlTwo hasPrefix:@"http://"]){
url2 = [NSURL URLWithString:urlTwo];
}else{
url2 = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@" , urlTwo]];
}
NSLog(@"url2:%@", url2);
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url2];
[webView loadRequest:requestObj];
[[self view] addSubview:webView];
}
}
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
[self alertStatus:@"Login Failed." :@"Login Failed!" :0];
}
}
我使用了NSUserDefaults方法来保存登录凭据,但它不起作用。凭据未保存,应用程序再次请求凭据
OrganizationCode
不是一个字符串,您可以通过以下方式将其作为字符串获取:
OrganizationCode = [[NSUserDefaults standardUserDefaults] stringForKey:@"OrganizationCode"];
您需要使用objectForKey:
来代替,请尝试:
OrganizationCode = [[NSUserDefaults standardUserDefaults] objectForKey:@"OrganizationCode"];
还有一件事,OrganizationCode看起来像是一个类的名称,而不是一个对象的实例,您确定您使用它的方式正确吗?要存储:登录按钮:
-(IBAction)Login:(id)sender
{
if (success) {
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
[status setObject:@"LOGGING" forKey:@"STATUS"];
// GO TO NEXT FUNCTION ??
}
}
-(void)load_view
{
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
NSString *status_str=[status objectForKey:@"STATUS"];
if ([status_str isEqualToString:@"LOGGING"]) {
// GO TO NEXT SUCCESS FUNCTION
}
else
{
// GO TO Login View
}
}
获取:验证按钮:
-(IBAction)Login:(id)sender
{
if (success) {
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
[status setObject:@"LOGGING" forKey:@"STATUS"];
// GO TO NEXT FUNCTION ??
}
}
-(void)load_view
{
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
NSString *status_str=[status objectForKey:@"STATUS"];
if ([status_str isEqualToString:@"LOGGING"]) {
// GO TO NEXT SUCCESS FUNCTION
}
else
{
// GO TO Login View
}
}
试试这个
成功登录后,将其保存在NSUserDefaults中
NSUserDefaults *status=[NSUserDefaults standardUserDefaults];
[status setObject:@"1" forKey:@"Login"];
下次只检查
NSUserDefaults *objUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *strSuccess=[objUserDefaults objectForKey:@"Login"];
if ([strSuccess isEqualToString:@"1"]) {
// just push the next view.
}
else {
// open login screen
}
或下一选项,如果您关心安全性
编辑
.h文件
NSUserDefaults *objUserDefaults;
@property (nonatomic,retain) NSUserDefaults *objUserDefaults;
.m文件
@synthesize objUserDefaults;
您第一次登录的方法是在响应中写入此内容\
objUserDefaults = [NSUserDefaults standardUserDefaults]
[objUserDefaults setObject:@"1" forKey:@"Login"];
and when you required for login check then
NSString *strSuccess=[objUserDefaults objectForKey:@"Login"];
if ([strSuccess isEqualToString:@"1"]) {
// just push the next view.
}
else {
// open login screen
}
问题是什么?对不起,在完成问题之前,它是意外提交的@AntonioMGIn我的应用程序需要输入accesscode才能登录。首次使用访问码登录后,我们不希望再次请求访问码。。我的意思是我需要保存首选项@AntonioMGthen在运行应用程序时使用默认值。但是您决定显示或跳过登录页面的代码在哪里。如果您没有将任何控制语句放在那里,当然,每次我更新代码并运行应用程序时,它都会显示出来,获取logcat as MOBILE[15599:907]-[NSUserDefaults setObject:forKey:]:尝试插入类“UITextField”的非属性值“”。请注意,属性列表中的字典和数组也必须只包含属性值。它的简单方法是取NSUserDefaults的全局对象并选中它,它是1还是否?您可以用代码Samir指导我。对我来说太晚了,因为我需要在今天之前提交到iTunes。很抱歉再次问你。。我将通过粘贴发送代码给你。请编辑并发送给我。成功登录后没有更多代码。。。登录成功后,我需要通过web视图加载url