Ceci est ma première question, j'espère que ce ne sera pas trop bête.Afficher le contrôleur ne s'affiche pas en raison d'une autre vue présentée n'ont pas terminé.
Voici mon application:
VC1
VC2 - ChatTableViewController
VC3 - PopupPhotoSourceVC
VC1 - un bouton pour présenter VC2 modalement
VC2 - un bouton "Bar" pour présenter VC3 modalement (VC3 présentation définie sur "Over Current Context")
VC2 - définir un segue segue
VC3 - deux boutons au milieu, tous deux réglés sur ci-dessus, déroulent la séquence par glissement et sélectionnent en utilisant StoryBoard.
intérieur VC3, utilisez préparer Segue pour laisser VC2 sait ce que l'utilisateur choisir
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destChatViewController = segue.destination as! ChatTableViewController
if segue.identifier == "library" // library Button
{
print("set cameraType to library from popupviewcontroller")
let time = getCurrentTime()
print("==== timer start ====== \(time.3):\(time.4):\(time.5)")
destChatViewController.cameraType = "library"
}
else if segue.identifier == "newphoto" // newphoto Button
{
print("set cameraType to newphoto from popupviewcontroller")
let time = getCurrentTime()
print("==== timer start ====== \(time.3):\(time.4):\(time.5)")
destChatViewController.cameraType = "newphoto"
}
// for unwind segue, no need to call dismiss
print("not calling dismiss pop up")
let time = getCurrentTime()
print("==== timer start ====== \(time.3):\(time.4):\(time.5)")
//dismiss(animated: true, completion: nil)
}
intérieur VC2, attachPhotoButtonFinish va essayer d'appeler le contrôleur de sélecteur d'image en fonction du choix de l'utilisateur
func attachPhotoButtonFinish() {
print("attachphotobutton start")
let time = getCurrentTime()
print("==== timer start ====== \(time.3):\(time.4):\(time.5)")
let image = UIImagePickerController()
image.delegate = self
if cameraType == "library"{
image.sourceType = UIImagePickerControllerSourceType.photoLibrary
}
else if cameraType == "newphoto"{
image.sourceType = UIImagePickerControllerSourceType.camera
image.cameraCaptureMode = .photo
}
else{
print("Something wrong!!!")
return
}
image.allowsEditing = false
image.modalPresentationStyle = .overCurrentContext
print("calling imagepicker")
let time1 = getCurrentTime()
print("==== timer start ====== \(time1.3):\(time1.4):\(time1.5)")
self.present(image, animated: true, completion: nil)
}
Et moi aussi essayer d'imprimer le temps deinit de VC3
deinit{
print("===== \(self.classForCoder.description()) be deinit")
let time = getCurrentTime()
print("==== timer start ====== \(time.3):\(time.4):\(time.5)")
}
A propos du résultat d'exécution, parfois (1 sur 10) VC3 se termine avant VC2 présent sélecteur d'image. Donc je peux le voir s'afficher correctement.
timer ==== début ====== 18:34:58
ne pas appeler rejeter pop up
timer ==== début ====== 18:34:58
à ChatTableViewController délasser et cameraType = bibliothèque
timer ==== début ====== 18:34:58
attachphotobutton start
minuterie ==== début ====== 18:34:58
en train d'appeler imagepicker
==== départ différé ====== 18:34:58
===== PhotoStreamSourceTest.PopupPhotoSourceVC être deinit
minuterie ==== début ====== 18:34:59
20/09/2017 18: 34: 59,274464 + 0800 PhotoStreamSourceTest [14690: 399530] [AXRun-PID] Client demandant la suspension du PID: 14706 Nom:
2017-09-20 18: 34: 59.283271 + 0800 PhotoStreamSourceTest [14690: 399463] [MC] Le conteneur du groupe de systèmes pour le chemin systemgroup.com.apple.configurationprofiles est /Users/_/Library/Developer/CoreSimulator/Devices/54B3F249-2C6A-4C18-B2E1-C7271199A7CF/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-09-20 18: 34: 59.284012 +0800 PhotoStreamSourceTest [14690: 399463] [MC] Lecture à partir de paramètres privés effectifs.
Mais la plupart du temps, je reçois le résultat suivant et le sélecteur d'image ne s'affiche pas.
timer ==== début ====== 18:35:48
ne pas appeler rejeter pop up
timer ==== début ====== 18:35:48
à ChatTableViewController délasser et cameraType = bibliothèque
timer ==== début ====== 18:35:48
attachphotobutton start
minuterie ==== début ====== 18:35:48
en train d'appeler imagepicker
==== départ différé ====== 18:35:48
2017-09-20 18: 35: 48.967515 + 0800 PhotoStreamSourceTest [14690: 400836] [AXRun-PID] Client demandant la suspension du PID: 14706 Nom:
2017-09-20 18: 35: 49.049357 + 0800 PhotoStreamSourceTest [ 14690: 399463] Avertissement: Tenter de vous présenter pendant qu'une présentation est en cours!
===== PhotoStreamSourceTest.PopupPhotoSourceVC être deinit
minuterie ==== début ====== 18:35:49
Merci!
jetez un oeil à ce [Signification de l'avertissement "alors qu'une présentation est en cours!"] (Https://stackoverflow.com/a/17120065/4056108) – chirag90
@ chirag90 Merci pour votre réponse rapide. Je me demande juste si le segue ne convient pas à ce scénario. Assurez-vous que VC3 est fermé avant d'appeler le sélecteur d'image est définitivement la règle. – Hungo
Désolé Mate, j'aidais juste avec l'avertissement – chirag90