2009-10-23 3 views
8

En raison de la sémantique de certaines pièces jointes NSTextView dans mon application, je veux savoir quand elles sont insérées ou supprimées de mon stockage de texte.Comment savoir si un attribut de pièce jointe est ajouté à mon NSTextView?

Ma sous-classe de NSTextView implémente la méthode shouldChangeTextInRange: replacementString: qui me permet de voir facilement quand une pièce jointe est sur le point d'être remplacée (je peux rechercher le stockage de texte dans la plage spécifiée). Parce que la chaîne de remplacement est juste un NSString et pas un NSAttributedString, je n'ai aucun moyen de voir à partir de cette méthode si une pièce jointe est en cours d'insertion. La documentation va même jusqu'à dire que la chaîne peut être nulle si "seuls les attributs" sont édités. Donc, la question est, quel est le meilleur point de dérogation pour voir quand une pièce jointe est en cours d'insertion? Ou peut-être aussi utile: quel est le meilleur point de dérogation pour voir quand les attributs sont modifiés? Mise à jour: J'ai dit plus haut que je n'avais aucun moyen de savoir si une pièce jointe est en train d'être insérée. Il me fait remarquer que je peux dire qu'une "pièce jointe" est impliquée, parce que la chaîne contiendra le NSAttachmentCharacter magique. Mais je n'aurai pas d'informations spécifiques sur la pièce jointe avant la fin de la modification.

Répondre

4

Je voudrais jeter un oeil à la méthode de délégué NSTextStorage -textStorageDidProcessEditing:, qui devrait être appelée chaque fois qu'une modification est apportée au stockage de texte sous-jacent. Vous pouvez ensuite utiliser les méthodes -editedRange, -editedMask et -changeInLength pour déterminer quelle section du stockage de texte a été modifiée et rechercher dans cette plage les pièces jointes susceptibles de vous intéresser.

+0

Merci, Brian. Ce n'est pas aussi idéal que je l'espérais mais il me semble que ça va faire l'affaire. Dommage qu'ils n'incluent pas les attributs dans la méthode shouldChange ... – danielpunkass

+0

Pour autant que je sache, '-textStorageWillProcessEditing:' autorise plus de modifications au texte que '-textStorageDidProcessEditing:'. Vous voudrez peut-être l'utiliser à la place. –

2

Vous pouvez jeter un oeil à deux NSTextStorage méthodes de délégué:

- (void)textStorageWillProcessEditing:(NSNotification *)notification; 
/* Delegate can change the characters or attributes */ 

- (void)textStorageDidProcessEditing:(NSNotification *)notification; 
/* Delegate can change the attributes */ 

intérieur textStorageWill/DidProcessEditing, vous pouvez appeler -[NSTextStorage editedMask] et -[NSTextStorage editedRange] pour savoir ce qui a changé et prendre des mesures en conséquence.

+0

Salut Jonathan - merci pour vos commentaires. J'ai voté votre réponse mais j'ai décidé d'accepter Brian parce que c'était quelques instants plus tôt et parce qu'il avait accumulé quelques votes supplémentaires. – danielpunkass