2010-11-30 25 views
1

J'utilise CoreData pour une application Mac qui s'exécute sous 10.5 et plus. Le contenu d'une entité (attribut de texte) sera affiché dans une NSTextView via des liaisons. L'utilisateur peut éditer le texte là.Enregistrement du contexte CoreData et du problème de liaison

Lorsque j'essaie de sauvegarder le contexte d'objet géré, le curseur de la souris disparaît de la vue de texte et la vue de texte défile vers le haut.

Comment puis-je empêcher CoreData/binding de faire cela parce que c'est ennuyeux pour l'utilisateur de perdre le focus!

Editer: Ajout de la solution comme réponse séparée pour marquer la question comme terminée!

Répondre

0

Je viens de trouver une solution à ce problème. Avant d'enregistrer le contexte d'objet géré j'économise le « état » (plage sélectionnée et faites défiler la position) de la vue texte

NSRange selectedRange = [self.textView selectedRange]; 
NSScrollView* scrollView = [self.textView enclosingScrollView]; 

// get the current scroll position of the document view 
NSPoint scrollPosition = [[scrollView contentView] bounds].origin; 

après avoir sauvé mes entités je ramènerai la plage sélectionnée et faites défiler la position

[self.textView setSelectedRange:selectedRange]; 

// restore the scroll location  
[[scrollView contentView] scrollToPoint: scrollPosition]; 
[scrollView reflectScrolledClipView: [scrollView contentView]]; 

I trouvé 2 solution possible pour régler la position de défilement d'une vue de défilement

0

Jetez un oeil à commitEditing avant de sauvegarder. Cela entraîne la perte de focus du textview ou même la restauration de toutes les modifications dans le champ de texte en cours. Je ne pense pas que vous pouvez empêcher ce comportement. Vous pouvez restaurer la sélection et la position du curseur après l'enregistrement. Je serais également intéressé par une solution réelle à ce problème.