Push view: pendant une transition ou une présentation existante; la pile de navigation ne sera pas mise à jour
Je reçois cette erreur quand il essaie de pousser une-vue-contrôleur.
j'ai un segue joint de la cellule de la table,
pushViewController:animation: appelé en même temps qu'un de transition ou de présentation est en cours; la pile de navigation ne sera pas mis à jour.
class PlaylistsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate {
let ItemRecordName = "Playlists"
var playlists = NSMutableArray()
@IBOutlet var tableView: UITableView?
var cloudm = CloudManager()
var container: CKContainer?
var publicDatabase: CKDatabase?
var edgePan = UIScreenEdgePanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
self.setUpMenu()
container = CKContainer.defaultContainer()
publicDatabase = container?.privateCloudDatabase
self.tableView!.contentInset = UIEdgeInsetsMake(64, 0, 0, 0)
}
func setUpMenu() {
self.slidingViewController().topViewAnchoredGesture = ECSlidingViewControllerAnchoredGesture.Panning | ECSlidingViewControllerAnchoredGesture.Tapping
//self.navigationController.view.addGestureRecognizer(self.slidingViewController().panGesture)
edgePan = UIScreenEdgePanGestureRecognizer(target: self, action: "menuButtonTapped")
edgePan.edges = UIRectEdge.Left
edgePan.delegate = self
self.navigationController.view.addGestureRecognizer(edgePan)
self.navigationController.navigationBar.translucent = true
let icon = FAKIonIcons.naviconIconWithSize(40)
icon.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor())
let iconImage = icon.imageWithSize(CGSizeMake(40, 40))
let plusicon = FAKIonIcons.ios7PlusEmptyIconWithSize(30)
plusicon.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor())
let plusiconImage = plusicon.imageWithSize(CGSizeMake(30, 30))
let barButton = UIBarButtonItem(image: iconImage, style: UIBarButtonItemStyle.Plain, target: self, action: "menuButtonTapped")
let barButton2 = UIBarButtonItem(image: plusiconImage, style: UIBarButtonItemStyle.Plain, target: self, action: "openNameForPlaylist")
barButton2.tag = 1
let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
let negativeSpacer2 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
negativeSpacer.width = -10
negativeSpacer2.width = 0.0
self.navigationItem.leftBarButtonItems = NSArray(objects: negativeSpacer, barButton)
self.navigationItem.rightBarButtonItems = NSArray(objects: negativeSpacer2, barButton2)
}
override func viewDidAppear(animated: Bool) {
self.getPlaylists()
}
func menuButtonTapped () {
self.slidingViewController().anchorTopViewToRightAnimated(true)
}
func getPlaylists() {
cloudm.fetchPlaylistNames("Playlists", completionHandler: {(records: NSMutableArray) -> Void in
if records.count > 0 {
println("got Playlists")
self.playlists = records
self.tableView?.reloadData()
//self.noFoodLabelAlpa(0, withDuration: 0, withDelay: 0)
} else {
println("dont got Playlists")
//self.noFoodLabelAlpa(1, withDuration: 1, withDelay: 1.8)
}
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
func openNameForPlaylist() {
var alert = UIAlertView(title: "Playlist Name", message: "Please choose a name for your Playlist", delegate: self, cancelButtonTitle: "Done")
alert.alertViewStyle = UIAlertViewStyle.PlainTextInput
alert.show()
}
func alertView(alertView:UIAlertView, clickedButtonAtIndex buttonIndex: NSInteger){
println(alertView.textFieldAtIndex(0).text)
addPlaylist(alertView.textFieldAtIndex(0).text)
}
func addPlaylist(name: String) {
if playlists.count == 10 {
var alert = UIAlertView(title: "Playlist is full", message: "You've reached the maximum number of songs in your playlist, to add more please remove some", delegate: self, cancelButtonTitle: "ok")
alert.show()
} else {
println("playlist count = \(self.playlists.count)")
var newRecord: CKRecord = CKRecord(recordType: ItemRecordName)
//var playlistName = "Playlist \(self.playlists.count + 1)"
newRecord.setObject(name, forKey: "playlistName")
self.cloudm.saveRecord(newRecord)
self.playlists.insertObject(newRecord, atIndex: 0)
//self.playlists.addObject(newRecord)
self.playlists.sortUsingDescriptors([NSSortDescriptor(key: "playlistName", ascending: true)])
var indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView?.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}
}
func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
return 1;
}
func tableView(tableView: UITableView!, heightForHeaderInSection section: Int) -> Int {
return 1
}
func tableView(tableView: UITableView!, viewForFooterInSection section: Int) -> UIView {
var view = UIView(frame: CGRect.zeroRect)
return view
}
func tableView(tableView: UITableView!, heightForFootInSection section: Int) -> Int {
return 1
}
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return playlists.count
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let CellIndentifier: NSString = "playlistCell"
var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIndentifier) as UITableViewCell
var selectedView = UIView(frame: CGRectMake(0,0,cell.contentView.frame.size.width, cell.contentView.frame.size.height))
cell.selectedBackgroundView = selectedView
cell.backgroundColor = UIColor.clearColor()
var records: CKRecord = self.playlists[indexPath.row] as CKRecord
var playlist:String = records.objectForKey("playlistName") as String
println("Playlists are \(playlist)")
cell.textLabel.text = playlist
return cell
}
func tableView(tableView: UITableView?, canEditRowAtIndexPath indexPath: NSIndexPath?) -> Bool {
//Return NO if you do not want the specified item to be editable.
return true
}
func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
if editingStyle == .Delete {
//Delete the row from the data source
self.cloudm.deleteRecord(self.playlists[indexPath.row] as CKRecord)
self.playlists.removeObjectAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
func tableView(tableView: UITableView!, didEndEditingRowAtIndexPath indexPath: NSIndexPath!) {
if playlists.count > 0 {
//self.noFoodLabelAlpa(0, withDuration: 0, withDelay: 0)
} else {
//self.noFoodLabelAlpa(1, withDuration: 1, withDelay: 0)
}
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
var indexPath = self.tableView!.indexPathForSelectedRow()
var record: CKRecord = self.playlists[indexPath.row] as CKRecord
let playlistOpen: PlaylistsOpenViewController = segue.destinationViewController as PlaylistsOpenViewController
playlistOpen.parentRecordID = record.recordID.recordName
playlistOpen.cloudm = self.cloudm
}
}
Mise à JOUR:
Ok, donc j'ai installé xcode beta 5, et maintenant les deux le simulateur et mon téléphone sont à recevoir cette erreur, qui n'existait pas avant cette version.. des idées?
source d'informationauteur bevbomb
Vous devez vous connecter pour publier un commentaire.
Ce qui semble être un bogue dans
ECSlidingView
qui il semble que vous utilisez. Voir leur outil de suivi d'. Il y a une solution qui permet pour certains scénarios, mais il ne sera pas vous aider ici je le crains. Tout ce que nous pouvons faire maintenant est d'attendre un patch ou Apple unbreak ce qu'ils ont fait irruption dans la version Beta 5.J'ai décidé de tout jeter ECSliding liés par la fenêtre et recommencer à l'aide de SWRevealViewController. Le commutateur a été étonnamment sans douleur, m'a pris environ une heure de travail pour une application avec quelques 20K LOC. C'est ce que je recommande à toute personne rencontrant ce problème.
Il existe un correctif fusionnées dans la branche master maintenant. Je vais le poster ici pour référence, il a été fourni par SpruceGoose429 et ajouté par fcy sur Github:
Comme je l'ai mentionné ce correctif est dans la version 2.0.3 de ECSlidingViewController.
J'ai eu la solution après avoir passé une heure.Le problème est de la pop viewcontroller qui est dans la pile tout en montrant une boîte d'alerte dans la vue actuelle du contrôleur.
Dans iOS 8 et ci-dessus, ils ne sont pas de soutien de ce genre.
Donc, vous devez afficher un message d'alerte avec ok ou OKcancel.
Ensuite, naviguer ou pop pour toute viewcontroller après avoir cliqué sur le bouton input.
Cela fonctionne pour vous.