2015-11-13 7 views
0

, поэтому общее представление о том, что я делаю, - это внедрение входа и выхода в систему на facebook и получение изображения профиля, имени, идентификатора.Swift: «неожиданно найдено нуль при развертывании необязательного значения»

процесс регистрации и получение информации работает, но моя проблема возникает, когда я пытаюсь выйти из системы. я в основном имею ExploreViewController, который имеет кнопку выхода из системы, а MeViewController где функция, которая IAM вызова, чтобы установить метку, показывающую информацию что-то еще

ExploreViewController:

@IBOutlet weak var LogoutButton: UIButton! 

@IBAction func LogoutButtonClicked(sender: AnyObject!) 

{ 
    let me = MeViewController() 
    me.releseObjects() 

} 

РМКО успешно вызывая IBAction

MeViewController:

@IBOutlet weak var idlable: UILabel! 
@IBOutlet weak var firstName: UILabel! 
@IBOutlet weak var imgProfile: UIImageView! 

override func viewDidLoad() { 

    super.viewDidLoad() 




    if((FBSDKAccessToken.currentAccessToken()) != nil) 
    { 
     let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name,id,email"]) 
     graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in 


      if ((error) != nil) 
      { 

      } 
      else 
      { 

       let userName : NSString = result.valueForKey("name") as! NSString 
       let userid : NSString = result.valueForKey("id") as! NSString 
       self.firstName.text=userName as String 
       self.idlable.text=userid as String 


       let accessToken = FBSDKAccessToken.currentAccessToken().tokenString 
       let url = NSURL(string: "https://graph.facebook.com/me/picture?type=large&return_ssl_resources=1&access_token="+accessToken) 
       _ = NSURLRequest(URL: url!) 
       let data=NSData(contentsOfURL: url!) 

        // Display the imag 
        let image = UIImage(data: data!) 
        self.imgProfile.image = image 
      } 
     }) 
    } 


func releseObjects(){ 

    let fn = "lolololol" 

    self.firstName.text = fn //getting the error here 
    } 

РМКО успешно устанавливая ПгвЬЫате этикетки для использования rname, что я получаю от Facebook в viewDidLoad(), моя проблема в том, что я не могу изменить содержимое метки, когда я вызываю функцию releaseObjects()

+0

проверить один раз 'self.firstName' связан через' IBOutlet' или нет? – Buntylm

+0

связано, потому что я могу успешно вывести имя пользователя в viewDidLoad после извлечения из facebook – user3671619

+0

Одним из неявных развернутых значений является 'nil'. Установите контрольную точку, чтобы ее проверить. – vadian

ответ

0

Вы создаете новый экземпляр здесь MeViewController, что является причиной сбоя.

//ExploreViewController: 
@IBOutlet weak var LogoutButton: UIButton! 
@IBAction func LogoutButtonClicked(sender: AnyObject!) 
{ 
    let me = MeViewController() 
    me.releseObjects() 
} 

Лучшее применение delegate/callbackHandler/Notification Вроде бы.

//MeViewController 
override func viewDidLoad() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "releseObjects", name: "Logout", object: nil) 
} 

func releseObjects(){ 
    self.firstName.text = "lolololol" 
} 


ExploreViewController 
@IBAction func LogoutButtonClicked(sender: AnyObject!){ 
    NSNotificationCenter.defaultCenter().postNotificationName("Logout", object: nil) 
} 
+0

Я пробовал то, что вы сделали в releaseObjects(), кажется, что он не вводит оператор if, потому что его фактически нет, что не имеет смысла, как это может быть nil, если я назначаю ему строку – user3671619

+0

проверьте обновленный anwser – Buntylm

+0

, этот вызывающе обработанный может у объяснить его немного – user3671619

0

Вопрос заключается в создании нового экземпляра MeViewController от ExploreViewController и пытается вызвать этот releseObjects метод:

let me = MeViewController() 
me.releseObjects() 

Это новый объект, а не тот, который вы использовали ранее. Поскольку он не представлен, выходы не были подключены (это будет ноль). И когда вы попытаетесь получить доступ к лейблу firstName, это обязательно сбой.

Предлагаю вам повторно использовать фактический объект MeViewController, вместо того чтобы создавать новый.

Смежные вопросы

 Смежные вопросы