2017-04-06 17 views
3

私はユーザーがプロフィールを見ているかどうかをチェックする機能を持っています。ここに私の機能があります。return文でプログラムが停止しないのはなぜですか?

func isUserViewCurrentUser() -> Bool { 
    guard let user = userDataDelegate?.userData() else { 
     return false 
    } 

    if user == Current.user { 
     print("returning false: USER IS CURRENT USER") 
     return false 
    } else { 
     print("returning true: USER IS NOT CURRENT USER") 
     return true 
    } 

} 

その後、私はのみ表示されますビューで私の機能を実行し、コードは、私が何かを印刷した後に停止するようになって:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    if isUserViewCurrentUser() == true { 
     self.navigationItem.rightBarButtonItem = nil 
     self.navigationItem.leftBarButtonItem = nil 
     return 
    } else { 
     return 
    } 

    if let userID = userDataDelegate?.userData().userID { 
     retrieveFollowerNumbers(userIdentifier: userID) 
     return 
    } 

} 

をしかし、私のコンソールには、印刷された「真を返す:USERは、現在のユーザではありません」何千回も停止しないでください。私は私のコードのどこでも、決してforループまたは任意のループでisUserViewCurrentUser()を実行していませんでした。

これは私のuserDataです:

protocol SendUserDataDelegate { 

    func userData() -> User 
} 

didSelect TableViewCell:

if let user = filteredUsers?[indexPath.row] { 
     userToPass = user 
     profileController?.userDataDelegate = self 
     self.navigationController?.pushViewController(profileController!, animated: true) 

    } 

そして、私のcellRowAtIndexPathで、このコード:

ユーザータブテーブルビューのセルにユーザーオブジェクトを送信
if isUserViewCurrentUser() == true { 
      cell.bioAndFollowStackView.addSubview(cell.followButtonOutlet) 
     } else { 
      if cell.followButtonOutlet != nil { 
       cell.followButtonOutlet.removeFromSuperview() 
      } 
     } 

別のviewController。

+2

ブレークポイントを作成し、2-3回スタックトレースを表示できますか? –

+1

デバッガを使用して、なぜこれが起きているのかを確認してください。 – rmaddy

+0

ブレークポイントを使用し、コールスタックトレースをチェックし、コールスタック( 'NSThread.CallStackSymbols()')を自己記録し、XCodeを使って 'isUserViewCurrentUser()'をチェックすることができます。 – Larme

答えて

1

個人的に私は内部のデータが実際同じであっても...あなたは別の参照で2つのオブジェクトを持っており、それらが等しいかどうかをチェックすることを見ます参照はできません。

このような場合は、idのような固有のもので確認できます。

user.id == Current.user.id {}

場合、私はあなたが達成しようとしているのか分からないが、私の個人的な意見(悪気)で臭い何かが...あります: )。あなたはより良い解決策を考えることができます。

これがうまくいくと思います

+0

これは、「適合する」準拠のオブジェクトである可能性があります。そして、どんな場合でも、答えはその質問に関連していません。 –

+0

現在のユーザーが自分のプロフィールをプレビューしているかどうかを確認していただけで、コードが悪い場合でもreturn文を置くので停止するはずです –

0

viewWillAppearには、と呼ばれ、userDataDelegate.userData()が呼び出されます。 userData()の投稿は投稿していませんが、再度表示されるか、isUserViewCurrentUser()をもう一度呼び出すと賭けるでしょう。いずれの場合においても

userData()コードを投稿してください...

+0

私はuserDataを追加しました。基本的には、あるコントローラから別のコントローラにユーザオブジェクトを転送するプロトコル関数です。 –

+0

@BukaCakrawalaプロトコルを投稿しました.'userData() 'の実装を投稿してください。 – xaphod

+0

ちょうどコード実装を投稿しました。 push segueからcellRowAtIndexへ –