2014-05-06 35 views
0

我正在登錄應用程序,請按照http://dipinkrishna.com/blog/2013/12/ios-login-screen-tutorial-xcode-5-ios-7-storyboard-json/Crash when [self performSegueWithIdentifier:@「login_success」sender:self];

當我在iPhone上測試APP時。一切都很好。

但是,當我在iPad上測試應用程序崩潰時

[self performSegueWithIdentifier:@"login_success" sender:self]; 

這裏是崩潰日誌:

2014-05-06 19:37:23.662 We Love HK[50458:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a Split View Controllers modally <LoginViewController: 0x10934f960>.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00000001019fc495 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010175b99e objc_exception_throw + 43 
    2 UIKit        0x0000000100408c93 -[UIViewController presentViewController:withTransition:completion:] + 4027 
    3 We Love HK       0x0000000100005a2d -[LoginViewController loginClicker:] + 3805 
    4 UIKit        0x0000000100309f06 -[UIApplication sendAction:to:from:forEvent:] + 80 
    5 UIKit        0x0000000100309eb4 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 17 
    6 UIKit        0x00000001003e6880 -[UIControl _sendActionsForEvents:withEvent:] + 203 
    7 UIKit        0x00000001003e595d -[UIControl touchesBegan:withEvent:] + 219 
    8 UIKit        0x0000000100340b74 -[UIWindow _sendTouchesForEvent:] + 300 
    9 UIKit        0x00000001003416e4 -[UIWindow sendEvent:] + 925 
    10 UIKit        0x000000010031929a -[UIApplication sendEvent:] + 211 
    11 UIKit        0x0000000100306aed _UIApplicationHandleEventQueue + 9579 
    12 CoreFoundation      0x000000010198bd21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    13 CoreFoundation      0x000000010198b5f2 __CFRunLoopDoSources0 + 242 
    14 CoreFoundation      0x00000001019a746f __CFRunLoopRun + 767 
    15 CoreFoundation      0x00000001019a6d83 CFRunLoopRunSpecific + 467 
    16 GraphicsServices     0x0000000103b29f04 GSEventRunModal + 161 
    17 UIKit        0x0000000100308e33 UIApplicationMain + 1010 
    18 We Love HK       0x00000001000045b3 main + 115 
    19 libdyld.dylib      0x000000010207f5fd start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

而且LoginViewController.h:

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 
#import "KeychainItemWrapper.h" 

@import Security; 

@interface LoginViewController : UIViewController <UITextFieldDelegate> 

@property (nonatomic, retain) IBOutlet UILabel *version_label; 

@property (strong, nonatomic) IBOutlet UITextField *txtUsername; 
@property (strong, nonatomic) IBOutlet UITextField *txtPassword; 


- (IBAction) loginClicker:(id)sender; 
- (IBAction) backgroundTap:(id)sender; 
- (IBAction) keyboardDismiss: (id) sender; 
- (IBAction) click_exit: (id) sender; 

@end 

LoginViewController.m:

#import "LoginViewController.h" 

@implementation LoginViewController; 

@synthesize version_label; 
@synthesize txtUsername; 
@synthesize txtPassword; 

-(void)viewDidLoad 
{ 
    KeychainItemWrapper *keychainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UserAuthToken" accessGroup:nil]; 
    NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; // Get App Version 
    NSString *build = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; // Get App Build Number 
    version_label.numberOfLines = 0;        // Enable \n break line 
    version_label.hidden = NO;          // Disable Hidden 
    //[keychainWrapper resetKeychainItem]; 
    version_label.text = [NSString stringWithFormat:@"V %@ (Build %@)", version, build]; // Change Version Label's Content 
    if ([keychainWrapper objectForKey:(__bridge id)(kSecAttrAccount)] && [keychainWrapper objectForKey:(__bridge id)(kSecValueData)]){ 
     txtUsername.text = [keychainWrapper objectForKey:(__bridge id)(kSecAttrAccount)]; 
     txtPassword.text = [keychainWrapper objectForKey:(__bridge id)(kSecValueData)]; 
    } 
} 

-(IBAction) keyboardDismiss: (id) sender{ 
    [txtUsername resignFirstResponder]; 
    [txtPassword resignFirstResponder]; 
} 

- (IBAction)backgroundTap:(id)sender { 
    [txtUsername resignFirstResponder]; 
    [txtPassword resignFirstResponder]; 
} 

- (IBAction)click_exit:(id)sender { 
    //[txtUsername resignFirstResponder]; 
    //[txtPassword resignFirstResponder]; 
} 

- (IBAction)loginClicker:(id)sender { 
    NSInteger success = 0; 
    @try { 

     if([[self.txtUsername text] isEqualToString:@""] || [[self.txtPassword text] isEqualToString:@""]) { 

      [self alertStatus:@"請輸入帳號及密碼!" :@"登入失敗!" :0]; 

     } else { 
      KeychainItemWrapper *keychainWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UserAuthToken" accessGroup:nil]; 
      NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",[self.txtUsername text],[self.txtPassword text]]; 
      NSLog(@"PostData: %@",post); 

      NSURL *url=[NSURL URLWithString:@"http://ls.arefly.com/other/php/welovehk/login.php"]; 

      NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

      NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 

      NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
      [request setURL:url]; 
      [request setHTTPMethod:@"POST"]; 
      [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
      [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
      [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
      [request setHTTPBody:postData]; 

      //[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]]; 

      NSError *error = [[NSError alloc] init]; 
      NSHTTPURLResponse *response = nil; 
      NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

      NSLog(@"Response code: %ld", (long)[response statusCode]); 

      if ([response statusCode] >= 200 && [response statusCode] < 300) 
      { 
       NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
       NSLog(@"Response ==> %@", responseData); 

       NSError *error = nil; 
       NSDictionary *jsonData = [NSJSONSerialization 
              JSONObjectWithData:urlData 
              options:NSJSONReadingMutableContainers 
              error:&error]; 

       success = [jsonData[@"login_status"] integerValue]; 
       NSLog(@"Success: %ld", (long)success); 

       if(success == 1) 
       { 
        NSLog(@"Login SUCCESS"); 
        [keychainWrapper setObject:[self.txtUsername text] forKey:(__bridge id)(kSecAttrAccount)]; 
        [keychainWrapper setObject:[self.txtPassword text] forKey:(__bridge id)(kSecValueData)]; 
        NSString *name_msg = (NSString *) jsonData[@"name_msg"]; 
        [self alertStatus:name_msg :@"歡迎!" :0]; 
       } else { 
        NSString *error_msg = (NSString *) jsonData[@"error_message"]; 
        [self alertStatus:error_msg :@"登入失敗!" :0]; 
        txtPassword.text = @""; 
       } 

      } else { 
       //if (error) NSLog(@"Error: %@", error); 
       [self alertStatus:@"Connection Failed" :@"登入失敗!" :0]; 
       txtPassword.text = @""; 
      } 
     } 
    } 
    @catch (NSException * e) { 
     NSLog(@"Exception: %@", e); 
     [self alertStatus:@"登入失敗!" :@"錯誤:" :0]; 
     txtPassword.text = @""; 
    } 
    if (success) { 
     [self performSegueWithIdentifier:@"login_success" sender:self]; 
    } 

} 

- (void) alertStatus:(NSString *)msg :(NSString *)title :(int) tag 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title 
                 message:msg 
                 delegate:self 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil, nil]; 
    alertView.tag = tag; 
    [alertView show]; 
} 

@end 

在這裏也didFinishLaunchingWithOptions在AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    return YES; 
} 

這裏是我Main_iPad.storyboard:

uploadpie.com/rTIVc

這裏是我Main_iPhone.storyboard:

uploadpie.com/gmpms

誰能幫我?

謝謝!

UPDATE

如果我改變模式在故事板推動下,APP依然崩潰,但它是一個不同的日誌:

2014-05-06 19:59:32.972 We Love HK[51824:60b] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'login_success'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00000001019fc495 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010175b99e objc_exception_throw + 43 
    2 UIKit        0x00000001007d1865 -[UIStoryboardPushSegue destinationContainmentContext] + 0 
    3 We Love HK       0x0000000100005a35 -[LoginViewController loginClicker:] + 3813 
    4 UIKit        0x0000000100309f06 -[UIApplication sendAction:to:from:forEvent:] + 80 
    5 UIKit        0x0000000100309eb4 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 17 
    6 UIKit        0x00000001003e6880 -[UIControl _sendActionsForEvents:withEvent:] + 203 
    7 UIKit        0x00000001003e595d -[UIControl touchesBegan:withEvent:] + 219 
    8 UIKit        0x0000000100340b74 -[UIWindow _sendTouchesForEvent:] + 300 
    9 UIKit        0x00000001003416e4 -[UIWindow sendEvent:] + 925 
    10 UIKit        0x000000010031929a -[UIApplication sendEvent:] + 211 
    11 UIKit        0x0000000100306aed _UIApplicationHandleEventQueue + 9579 
    12 CoreFoundation      0x000000010198bd21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    13 CoreFoundation      0x000000010198b5f2 __CFRunLoopDoSources0 + 242 
    14 CoreFoundation      0x00000001019a746f __CFRunLoopRun + 767 
    15 CoreFoundation      0x00000001019a6d83 CFRunLoopRunSpecific + 467 
    16 GraphicsServices     0x0000000103b29f04 GSEventRunModal + 161 
    17 UIKit        0x0000000100308e33 UIApplicationMain + 1010 
    18 We Love HK       0x00000001000045b3 main + 115 
    19 libdyld.dylib      0x000000010207f5fd start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 
+1

的[應用錯誤試圖把模態拆分視圖控制器]可能重複(http://stackoverflow.com/questions/11843991/error-on-application-tried-to-present-a -split-view-controllers-modally) –

+1

檢查這也http://stackoverflow.com/q/2579861/468724 –

+0

@dasdom我已更新到問題的完整代碼。謝謝 – Arefly

回答

1

你SEGUE是模態。改變其模式推動或更合適的。

+0

我試圖改變它推送並添加ID到它。但它仍然崩潰 – Arefly

+0

請參閱問題更新 – Arefly

+0

現在您沒有導航控制器。推僅適用於導航控制器。 –

0

改變你用來從「Modal」推送到「Push」的StoryBoard segue的風格。

+0

我嘗試將其更改爲推送並向其添加標識符login_success。但它仍然崩潰 – Arefly

+0

請參閱問題更新 – Arefly

+0

您應該有一個導航控制器來推動視圖控制器,所以添加一個導航控制器在故事板的開始處,並使其rootViewController成爲您想要加載的第一個視圖控制器。你可以在故事板本身做到這一點。 – ratnesh

0

我得到了類似的問題,並掙扎了一段時間。

事實證明,我不小心從Copy Bundle Resources中刪除了「Main.storyboard」文件。

爲了以防萬一,請確保您的「Main.storyboard」文件位於軟件包列表中。

enter image description here

相關問題