2011-10-22 6 views
1

私はiPhoneの開発をいくつかアウトソーシングしましたが、コードを簡単に変更しようとしていますが、意味がありません。誰かが私を助けてくれることを願っています。私は元の開発者に尋ねるだろうが、彼らはちょうど一週間の長い休暇のために残して、私は待つことを好まないだろう。UIAlertViewを削除したときにpushViewControllerが機能しなくなるのはなぜですか?

// 
// 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"]) 
    { 

     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]; 
    } 
} 

は、私も完全に第二の除去しようとしている。しかし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]; 
    } 
} 

を試してみました私はコード内に警告がない限り動作します。私は何のエラーもなく、アプリケーションはクラッシュしない、それは現在のページに残っているので、私は完全に迷っている。アラートで[OK]をクリックすることでトリガーされるアクションだと思うが、コードには何も表示されない。

私は問題を見つけることができるかどうかを確認するためにコードをステップアップしましたが、うまくいきます。

重要な場合は、xcode 4.2とiOS 5 SDKを使用しています。

もう一つの奇妙なのoccuranceが、私はこの

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]; 
     } 

のようなコードを実行し、私がログインエラーを取得する場合(それが他にアラートをトリガーするという意味)ということです。 OKをクリックすると、次のページに移動します。私は実際には、彼らは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

申し訳ありませんが、私の心は働いていません。私がしていたのは if(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; 
     } 
} 

はちょうどあなたがアラートを削除ブロックに上記の場合、ブロック内のコードを置きます。

関連する問題