2011-10-22 26 views
1

我外包了一些iPhone开发,我正在尝试对代码进行简单的更改,但这对我没有任何意义。我希望有人能帮助我。我会问最初的开发者,但他们刚刚离开了一个礼拜的假期,我宁愿不要等待。为什么pushViewController停止工作,当我移除一个UIAlertView

// 
// SettingViewController.m 
// FoodStorageManagement 
// 
// Created by Ryan McLaughlin on 10/20/11. 
// Copyright 2011 Food Storage Management. All rights reserved. 
// 

#import "SettingViewController.h" 
#import "MainViewController.h" 
#import "XMLRPCRequest.h" 
#import "XMLRPCResponse.h" 
#import "XMLRPCConnection.h" 
#import <CommonCrypto/CommonDigest.h> 
#import <CommonCrypto/CommonHMAC.h> 
@implementation SettingViewController 
@synthesize Obj_string,LoginState,hashkey,validuser,apikey,spinnerView; 

-(id)init 
{ 
    [super init]; 
    img_loginBg=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Loginpage.png"]]; 
    img_loginBg.frame=CGRectMake(0, 0, 320, 460); 

    app=[[UIApplication sharedApplication]delegate]; 

    UserIDtxt=[[UITextField alloc]initWithFrame:CGRectMake(150, 163, 160, 25)]; 
    UserIDtxt.returnKeyType=UIReturnKeyDone; 
    UserIDtxt.backgroundColor=[UIColor clearColor]; 
    //[email protected]"user"; 
    UserIDtxt.delegate=self; 
    UserIDtxt.tag=1; 

    pwdText=[[UITextField alloc]initWithFrame:CGRectMake(150, 220, 160, 25)]; 
    pwdText.backgroundColor=[UIColor clearColor]; 
    //[email protected]"123456"; 
    pwdText.secureTextEntry=YES; 
    pwdText.returnKeyType=UIReturnKeyDone; 
    pwdText.delegate=self; 
    pwdText.tag=2; 

    btn_SignUp=[UIButton buttonWithType:UIButtonTypeCustom]; 
    btn_SignUp.frame=CGRectMake(45, 335, 95, 35); 
    btn_SignUp.backgroundColor=[UIColor clearColor]; 
    [btn_SignUp setTitle:@"" forState:UIControlStateNormal]; 
    [btn_SignUp addTarget:self action:@selector(ClickOnSignUp) forControlEvents:UIControlEventTouchUpInside]; 
    [btn_SignUp retain]; 

    btn_LogIn=[UIButton buttonWithType:UIButtonTypeCustom]; 
    btn_LogIn.frame=CGRectMake(175, 335, 95, 35); 
    btn_LogIn.backgroundColor=[UIColor clearColor]; 
    [btn_LogIn setTitle:@"" forState:UIControlStateNormal]; 
    [btn_LogIn addTarget:self action:@selector(ClickOnLogIn) forControlEvents:UIControlEventTouchUpInside]; 
    [btn_LogIn retain]; 

    NSString *deviceVersion=[UIDevice currentDevice].systemVersion; 
    NSLog(@"%@",deviceVersion); 

    btn_Back=[UIButton buttonWithType:UIButtonTypeCustom]; 
    btn_Back.frame=CGRectMake(8, 417, 50, 40); 
    btn_Back.backgroundColor=[UIColor clearColor]; 
    [btn_Back setTitle:@"" forState:UIControlStateNormal]; 
    [btn_Back addTarget:self action:@selector(ClickOnBack) forControlEvents:UIControlEventTouchUpInside]; 
    [btn_Back retain]; 

    return self; 
} 

// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView 
{ 
    [super loadView]; 
    [self.view addSubview:img_loginBg]; 
    [self.view addSubview:btn_SignUp]; 
    [self.view addSubview:btn_LogIn]; 
    [self.view addSubview:btn_Back]; 
    [self.view addSubview:UserIDtxt]; 
    [self.view addSubview:pwdText]; 
} 

-(void)ClickOnSignUp 
{ 
    Connection=[[NetworkConnection alloc]initConnection]; 
    if (Connection.isReachable) 
    { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.foodstoragemanagement.com/signup.php"]]; 
    } 
    else 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Inventory" message:@"Network Connection unavailable.." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 

    } 
} 

-(void) startSpinner:(NSString*)type andDisplay:(NSString*)display{ 

    //remove any existing spinners at this point 

    if(self.spinnerView) 
    { 
     [self.spinnerView.view removeFromSuperview]; 
     self.spinnerView = nil; 
    } 
    self.spinnerView =[[[SpinnerModal alloc]initWithType:type andDisplay:display]autorelease]; 
    //add this to the root view of the app 
    //ViewManager *viewMgr = [ViewManager getManager]; 
    [self.view addSubview:self.spinnerView.view]; 
} 

-(void) stopSpinner{ 
    NSLog(@"SPINNER IS REMOVED"); 
    [self.spinnerView.view removeFromSuperview]; 
    self.spinnerView = nil; 
} 

-(void)ClickOnLogIn 
{ 
    Connection=[[NetworkConnection alloc]initConnection]; 
    if (Connection.isReachable) 
    { 
     [self startSpinner:@"spinner" andDisplay:@"Loading"]; 
     timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(ClickOnLog) userInfo:nil repeats:NO]; 
    } 
    else { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Inventory" message:@"Network Connection unavailable.." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
       [LoginError show]; 
       [LoginError release]; 
     [self stopSpinner]; 
    } 

} 

-(void)ClickOnLog 
{ 
    NSDate* now = [NSDate date]; 
    NSString *dateString=[[NSString alloc]init]; 
    dateString = [now description]; 
    dateString=[self dateInFormat:@"%s"]; 

    NSString *username=[UserIDtxt.text lowercaseString]; 
    NSString *username_reverse=[username reverseString]; 

    NSString *password_hash=[self sha256:pwdText.text]; 

    NSString *str=[NSString stringWithFormat:@"%@%@%@",username,password_hash,dateString]; 
    str=[self sha256:str]; 
    app.username=[NSMutableString stringWithString:username]; 
    app.password=[NSMutableString stringWithString:password_hash]; 

    //url from plist 
    NSString *server=[[NSString alloc]init]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]; 
    NSMutableDictionary *plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
    server=[plistDict objectForKey:@"NewUrl"]; 

    XMLRPCRequest *reqHello = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]]; 
    NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 

    [dict setValue:[UserIDtxt.text lowercaseString] forKey:@"username"]; 
    [dict setValue:str forKey:@"hash_key"]; 
    [dict setValue:dateString forKey:@"timestamp"]; 


    [reqHello setMethod:@"user.get_api" withObjects:[NSArray arrayWithObjects:dict,nil]]; 

    NSString *result=[self executeXMLRPCRequest:reqHello]; 
    if ([result length]>0) 
    { 
     NSLog(@"OUTPUT %@",result); 
     NSData* data=[result dataUsingEncoding:NSUTF8StringEncoding]; 
     NSXMLParser *parser1=[[NSXMLParser alloc]initWithData:data]; 
     [parser1 setDelegate:self]; 
     [parser1 parse]; 
     [reqHello release]; 

     defaults = [NSUserDefaults standardUserDefaults]; 
     app.defaultuser=[NSUserDefaults standardUserDefaults]; 
     [defaults setObject: app.globalApi_key forKey: @"api_key"]; 
     [defaults setObject:UserIDtxt.text forKey:@"username"]; 
     [defaults setObject:pwdText.text forKey:@"password"]; 
     app.defaultuser=defaults; 

     if (!app.globalApi_key) 
     { 
      defaults = [NSUserDefaults standardUserDefaults]; 
     } 
     [defaults synchronize]; 
     if (!val) 
     { 
      val=[defaults objectForKey:@"api_key"]; 
     } 

    } 
    else 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Inventory" message:@"Unable to communicate with the server" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 
    } 

    if(![result isKindOfClass:[NSString class]])//error occured 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Inventory" message:@"unable to communicate with server" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 
    } 
    else 
    { 
     if ([self.validuser isEqualToString:@"Authenticated Successfully"]) 
     { 
      if (app.Authorisation==TRUE) 
      { 
       UIAlertView *LoginOK=[[UIAlertView alloc]initWithTitle:@"Authentication" message:@"Authenticated successfully!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
       [LoginOK show]; 
       [LoginOK release]; 
      } 
      else 
      { 
       MainViewController *main=[[MainViewController alloc]init]; 
       [self.navigationController pushViewController:main animated:YES]; 
       [main release]; 

      } 
     } 
     else 
     { 
      UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Authentication" message:self.validuser delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [LoginError show]; 
      [LoginError release]; 
     } 
    } 
    [self stopSpinner]; 
} 

- (void)alertView:(UIAlertView *)ConfirmationAlert didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if([ConfirmationAlert.title isEqualToString:@"Authentication"]) 

    { 
     [self dismissModalViewControllerAnimated:YES]; 
     app.Authorisation=FALSE; 
    } 
} 

# pragma mark Parsing Delegate Methods 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"params"]) 
    { 
     Obj_string = [[NSMutableString alloc]init]; 
     LoginState =[[NSMutableString alloc]init]; 
     hashkey=[[NSMutableString alloc]init]; 
     validuser=[[NSMutableString alloc]init]; 

    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"name"]) 
    { 
     self.LoginState=self.Obj_string; 
    } 
    else if([elementName isEqualToString:@"string"]) 
    { 
     //NSLog(@"%@",Obj_string); 
     if([self.LoginState isEqualToString:@"hash_key"]) 
     { 
      self.hashkey=self.Obj_string; 
      app.globalhash_key=self.hashkey; 
     } 
     if([self.LoginState isEqualToString:@"api"]) 
     { 
      self.apikey=self.Obj_string; 
      app.globalApi_key=self.apikey; 
     } 
     if([self.LoginState isEqualToString:@"message"]) 
     { 
      self.validuser=self.Obj_string; 
     } 
    } 

    [Obj_string release]; 
    Obj_string = nil; 
    Obj_string = [[NSMutableString alloc]init]; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [Obj_string appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 
    //[LoginState appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 

} 


-(NSString *)dateInFormat:(NSString*)stringFormat { 
    char buffer[80]; 
    const char *format = [stringFormat UTF8String]; 
    time_t rawtime; 
    struct tm * timeinfo; 
    time(&rawtime); 
    timeinfo = localtime(&rawtime); 
    strftime(buffer, 80, format, timeinfo); 
    return [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding]; 
} 

- (NSString *)sha256:(NSString *)str 
{ 
    const char *inputString = [str UTF8String]; 
    unsigned char hashedChars[32]; // 32bit encoding 
    //unsigned char hashedChars[64]; // 64 bit encoding 
    //unsigned char hashedChars[64]; //16 bit encoding 
    CC_SHA256(inputString , strlen(inputString), hashedChars); 
    NSData *hashedData = [NSData dataWithBytes:hashedChars length:32];//32bit encoding 
    //NSData *hashedData = [NSData dataWithBytes:hashedChars length:64]; //64bit encoding 
    //NSData *hashedData = [NSData dataWithBytes:hashedChars length:16]; //16bit encoding 

    NSLog(@"hashedData = %@", hashedData); 
    NSString *someString = [NSString stringWithFormat:@"%@", hashedData]; 

    someString = [someString stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    someString = [someString stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
    someString = [someString stringByReplacingOccurrencesOfString:@">" withString:@""]; 
    //return hash; 
    return someString; 
} 

- (NSString *)getMD5FromString:(NSString *)source 
{ 
    const char *src = [source UTF8String]; 
    unsigned char result[16]; 
    CC_MD5(src, strlen(src), result); 
    NSString *ret = [[[NSString alloc] initWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", 
         result[0], result[1], result[2], result[3], 
         result[4], result[5], result[6], result[7], 
         result[8], result[9], result[10], result[11], 
         result[12], result[13], result[14], result[15] 
         ] autorelease]; 
    return [ret lowercaseString]; 
} 

- (id)executeXMLRPCRequest:(XMLRPCRequest *)req 
{ 
    XMLRPCResponse *userInfoResponse = [XMLRPCConnection sendSynchronousXMLRPCRequest:req]; 
    return [userInfoResponse object]; 
} 

-(void)ClickOnBack 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    //[self.navigationController popViewControllerAnimated:YES]; 
    //MainViewController *mainView=[[MainViewController alloc]init]; 
// [self.navigationController popToViewController:mainView animated:YES]; 
} 

-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
{ 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
    } else { 
     // Not found, so remove keyboard. 
     [textField resignFirstResponder]; 
    } 
    return NO; // We do not want UITextField to insert line-breaks. 
} 

-(NSString*) digest:(NSString*)input 
{ 

    NSData *data = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    // uint8_t digest[CC_SHA1_DIGEST_LENGTH]; 
    uint8_t digest[CC_SHA256_DIGEST_LENGTH]; 

    CC_SHA1(data.bytes, data.length, digest); 
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; 

    // for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) 

     for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) 

     [output appendFormat:@"%02x", digest[i]]; 

    return output; 

} 


/* 
// 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 { 
    [super dealloc]; 
} 


@end 

有问题的部分是

if ([self.validuser isEqualToString:@"Authenticated Successfully"]) 
    { 
     if (app.Authorisation==TRUE) 
     { 
      UIAlertView *LoginOK=[[UIAlertView alloc]initWithTitle:@"Authentication" message:@"Authenticated successfully!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [LoginOK show]; 
      [LoginOK release]; 
     } 
     else 
     { 
      MainViewController *main=[[MainViewController alloc]init]; 
      [self.navigationController pushViewController:main animated:YES]; 
      [main release]; 

     } 
    } 
    else 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Authentication" message:self.validuser delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 
    } 
} 

从表面上看似乎很简单。我想要做的更改是删除此警报

UIAlertView *LoginOK=[[UIAlertView alloc]initWithTitle:@"Authentication" message:@"Authenticated successfully!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
       [LoginOK show]; 
       [LoginOK release]; 

但是,对警报的任何更改都会导致pushViewController停止工作。我曾尝试注释警报出来,

if ([self.validuser isEqualToString:@"Authenticated Successfully"]) 
    { 
    if (app.Authorisation==TRUE) 
    { 
     // UIAlertView *LoginOK=[[UIAlertView alloc]initWithTitle:@"Authentication" message:@"Authenticated successfully!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     //[LoginOK show]; 
     //[LoginOK release]; 
    } 
    else 
    { 
     MainViewController *main=[[MainViewController alloc]init]; 
     [self.navigationController pushViewController:main animated:YES]; 
     [main release]; 

    } 
    } 
    else 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Authentication" message:self.validuser delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 
    } 
} 

我试图重写第二,如果

if ([self.validuser isEqualToString:@"Authenticated Successfully"]) 
    { 
    if (app.Authorisation==FALSE) 
    { 

     MainViewController *main=[[MainViewController alloc]init]; 
     [self.navigationController pushViewController:main animated:YES]; 
     [main release]; 

    } 
    } 
    else 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Authentication" message:self.validuser delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 
    } 
} 

我也曾尝试完全去除第二,如果

if ([self.validuser isEqualToString:@"Authenticated Successfully"]) 
    { 

     MainViewController *main=[[MainViewController alloc]init]; 
     [self.navigationController pushViewController:main animated:YES]; 
     [main release]; 


    } 
    else 
    { 
     UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Authentication" message:self.validuser delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginError show]; 
     [LoginError release]; 
    } 
} 

但pushViewController不会除非我在代码中有警告。我没有收到任何错误,应用程序不会崩溃,它只停留在当前页面,所以我完全处于亏损状态。这让我觉得他们是通过点击警告中的“确定”触发的一些动作,但是我没有在代码中看到任何东西。

我也通过代码,看看我是否能够发现问题,但似乎很好。

万一它很重要我使用xcode 4.2和iOS 5 sdk。

另一个奇怪的次数是,如果我像这样运行

if ([self.validuser isEqualToString:@"Authenticated Successfully"]) 
     { 

       MainViewController *main=[[MainViewController alloc]init]; 
       [self.navigationController pushViewController:main animated:YES]; 
       [main release]; 

     } 
     else 
     { 
      UIAlertView *LoginError=[[UIAlertView alloc]initWithTitle:@"Authentication" message:self.validuser delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [LoginError show]; 
      [LoginError release]; 
     } 

的代码,我得到一个登录错误(这意味着它会触发警报在else)。然后点击确定后,它将转到下一页。我真的不明白这是怎么发生的,因为他们在if的不同部分。我必须失去一些明显的东西。

+0

你都得到内存警告旁边? – logancautrell

+0

我还没有看到任何。他们的具体位置我应该看看吗? – ryanmc

+0

它会显示在控制台中。如果你是那么它可能是一个内存管理问题。 – logancautrell

回答

1

的UIAlertView中的委托方法不会被调用,因此从来没有否定了模态视图控制器

- (void)alertView:(UIAlertView *)ConfirmationAlert didDismissWithButtonIndex:(NSInteger)buttonIndex 

刚刚解雇视图控制器注释代码

[self dismissModalViewControllerAnimated:YES]; 
app.Authorisation=FALSE; 
+0

谢谢你做到了。 – ryanmc

0

我可能完全离开这里的基地,但你尝试删除整个块;

if (app.Authorisation==TRUE) 
    { ***STARTING HERE 
     UIAlertView *LoginOK=[[UIAlertView alloc]initWithTitle:@"Authentication" message:@"Authenticated successfully!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [LoginOK show]; 
     [LoginOK release]; 
    } 
    else 
    { 
     MainViewController *main=[[MainViewController alloc]init]; 
     [self.navigationController pushViewController:main animated:YES]; 
     [main release]; 

    } ***ENDING HERE 
} 
+0

我不确定我是否理解。你想我删除pushViewController吗?如果是这样,那么它将如何进入下一页? – ryanmc

+0

我试过了,就像我怀疑它没有移到下一页一样。 – ryanmc

+0

对不起,我的大脑不工作。如果(app.Authorisation == TRUE) MainViewController * main = [[MainViewController alloc] init]; [self.navigationController pushViewController:main animated:YES]; [主要发布]; } – CryptoJones

0

如果您删除警报,则不会调用委托方法。 这里本部分:

- (void)alertView:(UIAlertView *)ConfirmationAlert didDismissWithButtonIndex:(NSInteger)buttonIndex { 
     if([ConfirmationAlert.title isEqualToString:@"Authentication"]) { 
      [self dismissModalViewControllerAnimated:YES]; 
      app.Authorisation=FALSE; 
     } 
} 

只要把代码中的if块中上方到您删除警报的块。

相关问题