これはVC1のコードとVC2のデータです。私はVC2でこれらの次のテストコードで変数を使用する場合、ここでVC2でSwift 3、正常にデータを渡しましたが、使用するとvarはnilを返します。
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
selectedArtist = artists[indexPath.item]
performSegue(withIdentifier: "artistToArtSegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "artistToArtSegue" {
let artCollectionController = ArtCollectionController()
artCollectionController.artist = selectedArtist
artCollectionController.selectedArtist = selectedArtist
}
}
これらのコードは、
class ArtCollectionController: UICollectionViewController {
var artist = Artist() {
didSet{
print(artist.artistId ?? "did not work")
print(artist.name ?? "what name?")
}
}
var selectedArtist = Artist()
データを印刷しますが。彼らは何も返さない。
func fetchArtForArtist() {
guard let artistId = selectedArtist.artistId else {return}
print(artistId)
let fanRef = FIRDatabase.database().reference().child("art_ref").child(artistId)
fanRef.observeSingleEvent(of: .childAdded, with: { (snapshot) in
let artId = snapshot.key
print(artId)
// let dataRef = FIRDatabase.database().reference().child(artId)
// dataRef.observe(.value, with: { (snapshot) in
// let dictionary = snapshot.value as? [String: AnyObject]
// //let art =
// }, withCancel: nil)
}, withCancel: nil)
}
@IBAction func testButton(_ sender: UIBarButtonItem) {
print(selectedArtist.name ?? "no name")
print(12345)
}
override func viewDidAppear(_ animated: Bool) {
selectedArtist = artist
print(artist.name ?? "non")
print(selectedArtist.artistId ?? "no id")
}
override func viewDidLoad() {
super.viewDidLoad()
fetchArtForArtist()
selectedArtist = artist
print(artist.name ?? "non")
print(selectedArtist.artistId ?? "no id")
}
ストーリーボードでこれをやっています。差があるかどうかを確認する2つのvarsを使用してもIm。私はデータが正常にVC2にいくつかの変数に渡された理由を理解していないが、変数が使用されているときにはnilを返します。助けてください。
あなたはロックスターの男です!迅速かつ無痛!前に私がどのようにしたのかは、プログラム的なアプローチのほうが多かったと思います。プログラム的な私の他のプロジェクトでも動作します。ありがとうございます! –
@ReyCerioいいえ、投稿したコードは間違っていました。このビット: 'let artCollectionController = ArtCollectionController()'は、 'if'ステートメントの中括弧の中にのみ存在する' ArtCollectionController'の新しいインスタンスを作成します。画面には決して表示されず、表示しようとしている 'ArtCollectionController'とは何の関係もありません。 JuicyFruitのコードは、あなたが志望しているView Controllerにアクセスする方法です。 –