所以我已经研究过这一段很长一段时间了。我会尽力在这里解释一下,因为我不能确定一段代码,因为我不确定罪魁祸首在哪里。这是问题:我们的应用程序将谷歌地图作为主视图。从那里你可以点击一个“分享派对”按钮,它会带你到一个页面输入关于派对的信息,你可以分享,或分享和邀请朋友(两者都做同样的事情,后者只是让你去创建聚会后该聚会的邀请朋友页面)。一切都很好。然而,经过一个。举办派对然后再举办另一派对,或者b。观看派对然后制作另一个或c。查看弹出窗口(例如警报控制器)然后进行派对,应用程序似乎在进入允许您查看聚会详细信息的视图控制器后随机分段。它似乎与你执行上述事情的次数成正比,这意味着如果你执行了上述x次中的任何一次,它将在创建一个聚会后x次转到该视图控制器。我不知道将我们的应用程序名称放在公共帖子上是否合法,但是它位于苹果商店,所以如果您想尝试重新创建它以查看我的意思,请告诉我。
编辑:我在调试器中没有看到任何显示任何错误的东西。甚至没有警告或任何东西。编辑2:更多信息:
从登录视图控制器初始设置MapView和SlideMenu:
func createMenuView() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let mapViewController = storyboard.instantiateViewController(withIdentifier: "MapViewController") as! MapViewController
let menuViewController = storyboard.instantiateViewController(withIdentifier: "MenuViewController") as! MenuViewController
let nvc: UINavigationController = UINavigationController(rootViewController: mapViewController)
menuViewController.mainViewController = nvc
SlideMenuOptions.leftViewWidth = 210.0
let slideMenuController = SlideMenuController(mainViewController:nvc, leftMenuViewController: menuViewController)
slideMenuController.automaticallyAdjustsScrollViewInsets = true
slideMenuController.removeLeftGestures()
let delegate = UIApplication.shared.delegate as? AppDelegate
delegate?.window?.rootViewController = slideMenuController
delegate?.window?.makeKeyAndVisible()
}
从我们的MapViewController(登录后出现,见上文)准备segue到PartyDetailsViewAndEdit(有问题的segue)的函数:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "createPartySegue" {
//let destinationNavController = segue.destination as! UINavigationController
//let destination = destinationNavController.topViewController as! EditEventViewController
let destination = segue.destination as! EditEventViewController
destination.delegate = self
destination.location = activeLocation
destination.locationGMSPlace = searchedPlace
print("seguing to: EditParty")
} else if segue.identifier == "RequestPartySegue" {
let destinationNavController = segue.destination as! SelectFriendsViewController
destinationNavController.request = true
} else if segue.identifier == "PartyDetailsAndEditSegue" {
let vc = segue.destination as! PartyDetailsViewAndEditController
let marker = sender as! PartyMarker
mapView.selectedMarker = nil
vc.partyId = marker.party.partyID!
print("seguing to: \(marker.party.partyID!)")
vc.isfromMap = true
vc.partyData = marker.party.partyToDictionary()
} else if segue.identifier == "InviteFriendsSegue" {
let selectFriendsController = segue.destination as! SelectFriendsViewController
let marker = sender as! PartyMarker
selectFriendsController.inviteToPartyId = marker.party.partyID!
selectFriendsController.partyName = marker.party.name
}
}
然后,另一部分实际上是从EditPartyViewController创建派对。这基本上处理所有后端上传,然后使用它的委托(MapViewController)来关闭EditPartyViewController并将一方添加到一个引脚,然后将其添加到地图中。 MapViewController中的这个函数addParty是:
func addParty(_: EditEventViewController, with party : Party, at gmsPlace : GMSPlace?, fromCell: Bool) {
activeMarker?.map = nil
navigationController?.popViewController(animated: true)
let camera = GMSCameraPosition.camera(withTarget: gmsPlace!.coordinate, zoom: 16)
self.mapView.animate(to: camera)
let partyMarker = PartyMarker(party: party)
partyMarker.position = (gmsPlace?.coordinate)!
partyMarker.setIcon()
partyMarker.snippet = gmsPlace?.name
partyMarker.map = self.mapView
partyMarker.appearAnimation = GMSMarkerAnimation.pop
self.partyMarkers[party.partyID!] = partyMarker
if fromCell {
self.performSegue(withIdentifier: "InviteFriendsSegue", sender: partyMarker)
self.fromCell = true
}
对于一般的segue布局,一旦你到达mapview,你可以A.查看派对,(推送segue)或B.创建派对(这曾经是一个模态segue,其中嵌入了EditPartyViewController一个NavController,但我得到一个关于窗口层次结构的警告,所以我把它改为暂时推送,这就是现在的情况)。在查看聚会时,如果您具有邀请权限,则可以将推送到InviteFriends VC,您可以从Facebook好友或/和联系人中进行邀请。所有这些都是push segues。