2015-12-28 2 views
3

I m new для Xcode и i m для создания проекта с помощью кнопки входа. После нажатия логина с подробными сведениями в текстовом поле, он будет перенаправлен на второй вид, который является контроллером просмотра прокрутки. Тем не менее, я получил две части «Ошибка» which isSwift: фатальная ошибка: неожиданно обнаружено nil и EXC_BAD_INSTRUCTION

Обычно он работает с обычным контроллером (вход и переход на второй вид). Я только что воссоздал контроллер вида в контроллере просмотра прокрутки, и он не работал.

Кстати, я получил успех сборки, но я только что получил сообщение об ошибке, когда я пытаюсь «Войти»

Может кто-нибудь объяснить, почему я получил ошибку нити и фатальную ошибку? Как я могу решить проблему?

вид Войти Контроллер

@IBAction func LoginBtn(sender: AnyObject) { 
    LoginIn() 
} 

func LoginIn(){ 
    let user = PFUser() 
    user.username = usernameTF.text! 
    user.password = passwordTF.text! 

    PFUser.logInWithUsernameInBackground(usernameTF.text!, 
    password:passwordTF.text! , block: { (User: PFUser?, Error 
    :NSError?) -> Void in 

     if Error == nil{ 
      dispatch_async(dispatch_get_main_queue()){ 

       let Storyboard = UIStoryboard(name: "Main", bundle: nil) 
       let MainVC : UIViewController = Storyboard.instantiateViewControllerWithIdentifier("scrollV") as UIViewController 

       self.presentViewController(MainVC, animated: true, completion: nil) 

      } 
     } 
     else{ 
      NSLog("Wrong!!!!") 
     } 
    }) 
} 

Scroll View Controller

import UIKit 

class ScrollViewController: UIViewController { 


@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 


    let V1 : ScrollViewController = ScrollViewController(nibName: "ScrollViewController", bundle: nil) 
    self.addChildViewController(V1) 
    self.scrollView!.addSubview(V1.view!) 
    V1.didMoveToParentViewController(self) 
} 

ответ

3

Вы делаете некоторые вынуждены разворачивать, которые не рекомендуется (в общем принудительному материал в Swift не рекомендуется) , и это приведет к сбою вашего приложения, если разворачиваемая переменная - nil. Вот почему принудительное разворачивание рекомендуется только тогда, когда вы на 100% уверены, что у вас есть допустимое значение в вашем дополнительном.

В вашем случае кажется, что V1.view! вызывает сбой, и это может быть вызвано тем фактом, что V1 не был успешно загружен с наконечника.

Свифт упростил работу с нулевыми значениями. Просто не заставляйте разворачивать и вместо этого используйте optional binding.

+0

Большое спасибо. Да ты прав. Это что-то вроде исключения нулевого исключения? – yoadle

+0

Что-то вроде этого, хотя Swift очень легко работал с нулевыми значениями. Просто не заставляйте разворачивать и использовать [необязательную привязку] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5 -ID333) – Cristik

3

@Cristik правильный. Вместо того чтобы принудительно разворачивать переменную, вы должны проверить, не создается ли она с помощью оператора «if let»:

if let scrollView = self.scrollView { 
    if let subView = V1.view { 
      scrollView.addSubview(subView) 
    } 
} 
Смежные вопросы