2016-09-18 68 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

相关问题