2012-12-14 57 views
1

我有一個plistArray標題和item0item1憑據匹配,item2是字典存儲標題和密碼我app.now的我要檢查進行登錄過程從PLIST

eneter here 現在我要檢查爲傳遞和物品應匹配當我按下提交鍵login.i嘗試下面的代碼,但是Xcode的崩潰

-(void)authenticateCredentials 
{ 
NSMutableArray *plistArray = [NSMutableArray arrayWithArray:[self readFromPlist]]; 

for (int i = 0; i< [plistArray count]; i++) 
{ 
if ([[[plistArray objectAtIndex:i]objectForKey:@"pass"]isEqualToString:emailTextFeild.text] && [[[plistArray objectAtIndex:i]objectForKey:@"title"]isEqualToString:passwordTextFeild.text]) 
{ 
NSLog(@"Correct credentials"); 
return; 
} 
    NSLog(@"INCorrect credentials"); 
} 
} 

-(NSArray*)readFromPlist 
{ 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
    NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0]; 
NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"XYZ.plist"]; 

    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:documentPlistPath]; 

    NSArray *valueArray = [dict objectForKey:@"title"]; 

    return valueArray; 

} 

xcode得到崩潰..請檢查-(void)authenticateCredentials我在哪裏不正確?

崩潰時,我選擇submit按鈕,它不會給出任何輸出正確的或的NSLog和Xcode崩潰時不正確,與errorr

2012-12-14 12:10:45.142 NavTutorial[1661:f803] emailEntry: [email protected] 
2012-12-14 12:10:45.145 NavTutorial[1661:f803] passwordEntry: hellohello 
2012-12-14 12:10:45.153 NavTutorial[1661:f803] -[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x1568cd8 
2012-12-14 12:10:45.155 NavTutorial[1661:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]:  unrecognized selector sent to instance 0x1568cd8' 
*** First throw call stack: 
(0x14d7052 0x11c2d0a 0x14d8ced 0x143df00 0x143dce2 0x3981 0x14d8ec9 0x3735c2 0x37355a 0x418b76 0x41903f 0x417e22 0x39893f 0x398c56 0x37f384 0x372aa9 0x1bcdfa9 0x14ab1c5 0x1410022 0x140e90a 0x140ddb4 0x140dccb 0x1bcc879 0x1bcc93e 0x370a9b 0x211d 0x2095 0x1) 
terminate called throwing an exception 

前兩天相同的代碼工作很好

如果我把斷點爲IF條件a後來如果在條件不成立之後失敗。

回答

1

修改您的authenticateCredentials如下所示,並檢查它是否正常工作。如果它顯示錯誤消息爲Error! Not a dictionary,則需要檢查您的plist是否具有正確的結構。大多數情況下,您的[objDict objectForKey:@"pass"]正在返回不同的數據類型。

- (void)authenticateCredentials { 
    NSMutableArray *plistArray = [NSMutableArray arrayWithArray:[self readFromPlist]]; 

    for (int i = 0; i< [plistArray count]; i++) 
    { 
     id object = [plistArray objectAtIndex:i]; 

     if ([object isKindOfClass:[NSDictionary class]]) { 
      NSDictionary *objDict = (NSDictionary *)object; 

      if ([[objDict objectForKey:@"pass"] isEqualToString:emailTextFeild.text] && [[objDict objectForKey:@"title"] isEqualToString:passwordTextFeild.text]) 
      { 
       NSLog(@"Correct credentials"); 
       return; 
      } 
      NSLog(@"INCorrect credentials"); 
     } else { 
      NSLog(@"Error! Not a dictionary"); 
     } 
    } 
}