2011-03-03 177 views
1

Alrighty,所以我创建了一个NSLURLRequest,它应该从服务器获取一个字符串并将其带回到程序中。根据返回的字符串,程序应该转换到不同的视图。由于某些原因,即使控制台返回了正确的字符串,条件语句中的方法也没有执行。这里是我的代码:NSURLRequest身份验证不起作用

#import "login.h" 


@implementation login 

@synthesize viewController; 
@synthesize viewControllerTwo; 
@synthesize userName; 
@synthesize passWord; 
@synthesize verified; 
@synthesize receivedData; 
@synthesize requestType; 

/* 
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
    // Custom initialization 
} 
return self; 
} 
*/ 

-(IBAction)login{ 
[self performSelector:@selector(getAuthentication) withObject:nil afterDelay:0.5]; 
//[self performSelector:@selector(authenticate) withObject:nil afterDelay:5.0]; 
} 

-(void)authenticate{ 
NSString *good = @"Done"; 
NSLog(@"%@", good); 
    if(verified == good){ 
      [self performSelector:@selector(changeViewAdmin) withObject:nil afterDelay:1.0]; 
     } 
     if(verified == @"user"){ 
      [self performSelector:@selector(changeView) withObject:nil afterDelay:1.0]; 
     } 
     if(verified == @"No"){ 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
    message:@"Invalid UserName/Password combination!" 
    delegate:self 
    cancelButtonTitle:@"Okay" 
    otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
     } 
    } 

-(void)getAuthentication{ 
requestType = 1; 
NSMutableString *urlWithParameters = [NSMutableString stringWithString:kLoginURL]; 

[urlWithParameters appendFormat:@"?userName=%@&passWord=%@", userName.text, passWord.text]; 

NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlWithParameters]]; 

//NSLog(@"%@", req); 

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:req delegate:self]; 
    if(theConnection){ 
    NSMutableData *data = [[NSMutableData alloc] init]; 
    self.receivedData = data; 
    [data release]; 
    } 
[userName resignFirstResponder]; 
[passWord resignFirstResponder]; 
[req release]; 
} 

-(void)changeView{ 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.5; 
    transition.timingFunction = [CAMediaTimingFunction 
           functionWithName:kCAMediaTimingFunctionEaseOut]; 
    transition.delegate = self; 

    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromRight; 

    [self.view.layer addAnimation:transition forKey:@"transition3"]; 
    viewController = [[MapMeViewController alloc] initWithNibName:@"MapMeViewController" bundle:[NSBundle mainBundle]]; 
    [self.view addSubview:viewController.view]; 
} 

-(void)changeViewAdmin{ 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.5; 
    transition.timingFunction = [CAMediaTimingFunction 
           functionWithName:kCAMediaTimingFunctionEaseOut]; 
    transition.delegate = self; 

    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromRight; 

    [self.view.layer addAnimation:transition forKey:@"transition3"]; 
    viewControllerTwo = [[AdminPanel alloc] initWithNibName:@"AdminPanel" bundle:[NSBundle mainBundle]]; 
    [self.view addSubview:viewControllerTwo.view]; 
} 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 


/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [viewController release]; 
    [viewControllerTwo release]; 
    [userName release]; 
    [passWord release]; 
    [verified release]; 
    [receivedData release]; 
    [super dealloc]; 
} 

#pragma mark - 
#pragma mark NSURLConnection Callbacks 
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 
[receivedData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
[receivedData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection 
    didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    /*// Access has failed two times... 
    if ([challenge previousFailureCount] > 1) 
    { 
    [kFormURL release]; 


UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication Error" 
           message:@"Too many unsuccessul login attempts." 
           delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

[alert show]; 
[alert release]; 
    } 
    else 
    {*/ 
    // Answer the challenge 
    NSURLCredential *cred = [[[NSURLCredential alloc] initWithUser:@"//rightusername" password:@"//rightpassword" 
     persistence:NSURLCredentialPersistenceForSession] autorelease]; 
    [[challenge sender] useCredential:cred forAuthenticationChallenge:challenge]; 
    //} 
    } 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
[connection release]; 
self.receivedData = nil; 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
message:[NSString stringWithFormat:@"Connection failed! Error - %@ (URL: %@)",[error localizedDescription], [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]] 
delegate:self 
cancelButtonTitle:@"Bummer" 
otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
NSString *payloadAsString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 
verified = payloadAsString; 
[payloadAsString release]; 
NSLog(@"%@", verified); 
    if(verified == @"Done"){ 
     [self performSelector:@selector(changeViewAdmin) withObject:nil afterDelay:1.0]; 
    } 
//[payloadAsString release]; 
//NSLog(@"%@", verified); 
// INSERT GOOGLE MAPS URL REQUEST HERE 
/*if(requestType == 1){ 
NSString* addressText = payloadAsString; 
// URL encode the spaces 
addressText = [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding]; 
NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText]; 
// lets throw this text on the log so we can view the url in the event we have an issue 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]]; 
// */ 
// 
//} 
[connection release]; 
self.receivedData = nil; 
} 


@end 
+0

这里是崩溃日志: – yeahdixon 2012-05-01 22:44:38

回答

3

哎哟,不,不,不,...

if (verified == @"Done") 

...你在这里,而不是verified变量的内容比较指针。您应该使用:

if ([verified isEqualToString:@"Done"]) 

阅读本https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html%23//apple_ref/doc/uid/20000154-SW29

附:格式化您的文章,它是不可读的...我不得不编辑它...

+0

非常感谢您格式化它!我为我呈现的随意方式表示歉意,正处于工作中。 :) – user298261 2011-03-03 21:11:56

+0

感谢上帝!这工作!你,先生,是救命恩人! :D – user298261 2011-03-03 21:17:28

+0

不客气。 “正处于工作的中间:)” - 不是很好的陈述,你只是说 - 我没有太多时间来正确地问,但我期望人们拥有它,所以,他们破译我的问题并浪费更多的时间...不好,想一想;-) – robertvojta 2011-03-03 21:27:34