2016-09-18 31 views
1

我的StoryBoard上有一個名爲toGuestVCpush segue字符串沒有從prepareForSegue傳遞到下一個視圖控制器

我用它來S​​egue公司下一ViewController在我didSelectRowAtIndexPath方法,像這樣:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let username = followUsernameArray[indexPath.row] 
    performSegue(withIdentifier: SG_TO_GUEST_VIEW_CONTROLLER, sender: username) 
} 

然後在我的prepareForSegue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == SG_TO_GUEST_VIEW_CONTROLLER { 
     if let nextVC = segue.destination as? GuestCollectionVC, let sender = sender as? String { 
      print("PRINTING NEXT VC: \(nextVC)") //This prints out the memory address. Not sure if this is what you meant by print nextVC. 
      nextVC.guestUser = sender 
     } 
    } 
} 

出於某種原因,這條線在我的prepareForSegue沒有運行:

nextVC.guestUser = sender.username

Wh我嘗試在我的nextViewController中輸出guestUser的值,guestUser的值是nil。但是,當我在prepareForSegue方法中打印出發件人的價值時,它不是nil

那麼我的sender值沒有傳遞給下一個ViewController?我無法找到解決這個問題的任何想法?

GuestCollectionVC實現:

import UIKit 
import Parse 

private let reuseIdentifier = "Cell" 

class GuestCollectionVC: UICollectionViewController { 

var guestUser: String! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("PRINTING SELF IN GuestCollectionVC: \(self)") 
    loadPosts() 
} 

    func loadPosts() { 
     //Load posts query 
     let query = PFQuery(className: PF_POSTS_CLASS) 
     query.limit = postCount 
     //Getting error here below this comment when I use guestUser since it is nil 
     query.whereKey(PF_POSTS_USERNAME_COLUMN, equalTo: guestUser) 
     query.findObjectsInBackground { (result: [PFObject]?, error: Error?) -> Void in 
      if error == nil { 
       if let result = result { 

        self.uuidOfPosts.removeAll(keepingCapacity: false) 
        self.imageArrayOfPFFIle.removeAll(keepingCapacity: false) 

        for postObject in result { 
         if let uuid = postObject[PF_POSTS_UUID_COLUMN] as? String, let pic = postObject[PF_POSTS_PIC_COLUMN] as? PFFile { 
          self.uuidOfPosts.append(uuid) 
          self.imageArrayOfPFFIle.append(pic) 
         } 
        } 
        self.collectionView?.reloadData() 
       } 
      }else if error != nil { 
       print("ERROR FROM GUEST COLLECTION VC FROM loadPosts FUNCTION: \(error?.localizedDescription)") 
      } 
     } 
    } 
} 

所以這是我在GuestViewController實施。在我loadPosts方法,其中我使用了可變guestUser我收到錯誤:

fatal error: unexpectedly found nil while unwrapping an Optional value

+0

'username'的值是什麼? – Aaron

+0

這是一個字符串。所以根據他們選擇哪一行來抓取它。 – CapturedTree

+0

看起來像'guestUser'屬性,你試圖設置稍後在一些'GuestCollectionVC'加載方法中替換,可能在'viewDidLoad'中。請向我們展示'GuestCollectionVC'實現。 –

回答

0

從控制檯打印

PRINTING NEXT VC: "InstagramClone.GuestCollectionVC: 0x7a6c5cc0"

PRINTING SELF IN GuestCollectionVC: "InstagramClone.GuestCollectionVC: 0x7a6c5100"

這是現在很明顯,中GuestCollectionVC隱藏意想不到的實例被創建。所以,根據這兩個對象的順序調用它們的viewDidLoad方法(可以是任何順序)會發生不同的錯誤。另外在nextVCviewDidLoad方法中可能會有其他錯誤,但這是其他問題的其他故障。

,因爲你創建行動 SEGUE,該工程對細胞點擊(創建隱藏視圖控制器)自動你有這個問題,並在同一時間,你在代碼執行此SEGUE,創建第二個控制器nextVC

要解決問題,您應該找到並刪除該segue並添加新的,而不是動作 segue從您的視圖控制器的某些元素,但視圖控制器之間的「空」segue。要創建這種類型的遊戲,您應該選擇第一個視圖控制器,按住「控制」鍵並開始從第一個視圖控制器(該符號控制器本身)頂部的黃色方塊拖動到下一個視圖控制器,選擇「顯示」並設置標識符。

+1

噢!它現在有效。這就是我原先的想法。我可能已經錯誤地創建了賽段。 – CapturedTree

-1

因爲我沒有你tableView方法中的值的完整方面,我只能猜測。這就是說,你正在傳遞應該是視圖控制器發件人:

performSegue(withIdentifier: "toGuestVC", sender: username) 

你傳遞一個叫username值看起來是一個字符串值?它應該是這樣的:

performSegue(withIdentifier: "toGuestVC", sender: self) 

其中self是您的視圖控制器。如果您將字符串值傳遞給sender,那麼在您的prepareForSegue方法中,則sender不具有名爲username的屬性實際上username。因此,你應該在其他地方傳遞值:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let indexPath = self.tableView.indexPathForSelectedRow 
    if let nextVC = segue.destination as? GuestCollectionVC { 
     nextVC.guestUser = followUsernameArray[indexPath.row] 
    } 
} 
+0

謝謝你的迴應。但我不相信我正在對'sender'的String值調用'destination'。我在'UIStoryboardSegue'對象(segue)上調用'destination'。如果我錯誤地解釋了你的答案,請糾正我。但我會嘗試用自己替換字符串值。 – CapturedTree

+0

對。腦屁,我編輯了我的答案。無論如何你都會明白。 – Aaron

+0

好了,所以我用'self'並更新了兩個我的方法在我的文章中,但它仍然給我'無。' – CapturedTree

相關問題