iOS登录过程适用于模拟器,但不适用于iPhone(3GS)

问题描述:

我为我开发的iPhone应用程序创建了一个登录过程,登录过程在Xcode的iOS模拟器应用程序中工作,但不适用于我的实际电话。在登录过程中的代码是:iOS登录过程适用于模拟器,但不适用于iPhone(3GS)

- (IBAction)processLogin:(id)sender { 

// hide keyboard 
[_textFieldUsername resignFirstResponder]; 
[_textFieldPin resignFirstResponder]; 


// First - make activity indicator visible, then start animating, then turn of wrong user/pin label 
_welcomeActivityIndicator.hidden = FALSE; 
[_welcomeActivityIndicator startAnimating]; 
[_wrongUserPin setHidden:YES]; 

// check if username and pin text fields are populated 
if ([_textFieldUsername.text length ] == 0 && [_textFieldPin.text length ] == 0) 
{ 
    [_welcomeActivityIndicator stopAnimating]; 
    [_wrongUserPin setHidden:NO]; 
} 

// CORE DATA 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:_managedObjectContext]; 

// set entity for request 
[request setEntity:entity]; 

// filter results using a predicate 
NSPredicate *pred =[NSPredicate predicateWithFormat:(@"username = %@"), _textFieldUsername.text]; 

// set predicate for the request 
[request setPredicate:pred]; 

NSError *error = nil; 

// store DB usernames in results array 
NSArray *results = [_managedObjectContext executeFetchRequest:request error:&error]; 

NSLog(@"The returned results are %@",results); 


// check text field against results stored in DB 
for (Account *anAccount in results) { 
    if ([anAccount.username isEqualToString:_textFieldUsername.text]){ 
     NSLog(@"Your username exists"); 
     if ([anAccount.password isEqualToString:_textFieldPin.text]){ 
      NSLog(@"Your pin is correct"); 

      // TODO - put this in proper place - play audio bell if user logs in correctly 
      CFBundleRef mainBundle = CFBundleGetMainBundle(); 
      CFURLRef soundFileURLRef; 
      soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"Glass", CFSTR("aiff"), NULL); 
      UInt32 soundID; 
      AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
      AudioServicesPlaySystemSound(soundID); 

      // TODO - put this in proper place - Load ViewController(Root)Home 
      if([anAccount.username isEqualToString:@"root"]) 
      { 
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
       ViewControllerRootHome *roothome = (ViewControllerRootHome *)[storyboard instantiateViewControllerWithIdentifier:@"rootHome"]; 
       [self presentModalViewController:roothome animated:YES]; 
      } 
      else { 
       UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
       ViewControllerHome *home = (ViewControllerHome *)[storyboard instantiateViewControllerWithIdentifier:@"Home"]; 
       [self presentModalViewController:home animated:YES]; 
      } 
     } 
     else { 
      NSLog(@"Your pin is wrong"); 
      [_welcomeActivityIndicator stopAnimating]; 
      [_wrongUserPin setHidden:NO]; 
      } 
     } 
    else { 
     NSLog(@"Your username was not found"); 
     [_welcomeActivityIndicator stopAnimating]; 
     [_wrongUserPin setHidden:NO]; 
     } 
    } 

} 

我存储在核心数据DB的用户名,并存储在钥匙串针。我能够创建在iPhone上的帐户和信息现场表明,有在iPhone上创建的帐户,但是当我尝试登录我看到的是用户名或密码是错误的

可以将项目从这里下载https://github.com/ipatch/KegCop/zipball/master

+0

我尝试删除应用程序,并在手机上再次构建并运行应用程序,但仍然遇到相同的结果。 – Chris 2012-07-08 20:56:59

+1

这是什么意思'不起作用'它做了什么? – 2012-07-08 21:23:26

+0

@Lablabla“但是当我尝试登录所有我看到的是用户名或PIN是错误的”用户不被带到家庭场景而是欢迎场景留在屏幕上,因此用户从不登录。 – Chris 2012-07-08 21:36:19

我不确定是什么解决了这个问题,但是在完成following tutorial后,登录过程再次运行。

它看起来不像你在这个代码中的任何地方存储用户名/密码到CoreData。你确定你的默认数据库中有条目吗?

+0

I不是试图将数据存储到核心数据,而是检查用户名tf是否与存储在核心数据数据库中的用户名相匹配,以及如果引脚tf等于存储在钥匙串中的引脚,这是登录过程,而不是帐户创建过程。帐户正在创建(o.O) – Chris 2012-07-08 21:39:00

+0

我明白,但在这一点上,你是否确保数据库实际上拥有你认为他们做的条目? – coneybeare 2012-07-08 23:52:53

+0

那么在“关于”场景中,它表示系统上已创建账户。您可以通过https://github.com/ipatch/KegCop/zipball/master下载我正在开发的项目,并看到代码在模拟器中运行,但是当您在手机上进行测试时,请告诉我您获得的结果。 – Chris 2012-07-09 01:08:00