J'ai une liste UITableView. J'ai ajouté le code ainsi quand une liste items/ligne est exploité, l'utilisateur peut modifier le contenu des cellules dans une vue modale:Pourquoi la fonction "Tap to Edit" de UITableView est-elle SLOW?
- Sur tapotant, le code enregistre le titre/desc de la cellule à vars
- lance alors mon point de vue éditeur modal
- le principal VC passe l'éditeur VC le titre/desc vars
- les valeurs var sont chargées dans les zones de texte afin que l'utilisateur peut les modifier
le problème:
C'est un comportement étrange. Lorsque je teste l'application, le premier fois que j'appuie sur une cellule après l'ouverture de l'application, il y a parfois un délai de 2-3 secondes avant que la vue modale apparaît. Je remarque également que le délai se produit la première fois que j'appuie sur chaque cellule, mais pas sur la seconde. Enfin, parfois après l'ouverture de l'application, il semble ignorer le premier robinet. Est-ce un comportement normal de demande de récupération de données de base?
code chargé sur la principale VC viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//Break
//Load the list from Core Data
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName:"TodayTask")
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as? [NSManagedObject]
if let results = fetchedResults {
todayTaskList = results
} else {
println("Could not fetch \(error), \(error!.userInfo)")
}
//Break
//This provides a variable height for each row
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 80.0
//Break
//Part of code for cell drag and drop functionality
let longpress = UILongPressGestureRecognizer(target: self, action: "longPressGestureRecognized:")
tableView.addGestureRecognizer(longpress)
}
code exécuté sur le robinet cellulaire
//Action: Performs 'tap on edit' segue
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
passingEdit = true
performSegueWithIdentifier("modalToEditor", sender: nil)
}
//Prepares variables to be passed for editing
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "modalToEditor") && passingEdit == true {
//Assign selection to a variable 'currentCell'
let indexPath = tableView.indexPathForSelectedRow();
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! CustomTableViewCell;
//Set cell text into variables to pass to editor
var cellNameForEdit = currentCell.nameLabel!.text
var cellDescForEdit = currentCell.descLabel.text
//Pass values to EditorView
var editorVC = segue.destinationViewController as! EditorView;
editorVC.namePassed = cellNameForEdit
editorVC.descPassed = cellDescForEdit
editorVC.indexOfTap = indexPath
}
}
Vous devez appeler 'CoreData' sur le thread 'BackGround'. –
Etes-vous sur iOS8? Je pense que c'est un bug. Voir [cette réponse] (http://stackoverflow.com/a/31073321/3985749) pour un travail autour. Le lien dans le commentaire ci-dessous est également intéressant. – pbasdf
@pbasdf Je suis sur 8.4 - Je vais donner à cette solution de contournement un coup de feu. Merci beaucoup –