2009-10-23 3 views
8

Wegen der Semantik bestimmter NSTextView Anhänge in meiner Anwendung, möchte ich wissen, wenn sie von meinem Textspeicher eingefügt oder gelöscht werden.Woher weiß ich, wann ein Anhangsattribut zu meiner NSTextView hinzugefügt wird?

Meine Unterklasse von NSTextView implementiert die sentChangeTextInRange: ErsetzungString: -Methode, mit der ich leicht sehen kann, wenn ein Anhang ersetzt werden soll (ich kann den Textspeicher im angegebenen Bereich durchsuchen).

Da der Ersatz-String nur ein NSString und kein NSAttributedString, habe ich keine Möglichkeit aus diesem Verfahren zu sehen, ob ein Anhang eingefügt wird. Die Dokumentation geht sogar so weit zu sagen, dass die Zeichenkette gleich null sein kann, wenn "nur Attribute" bearbeitet werden.

Die Frage ist also, was ist der beste Überschreibung Punkt zu sehen, wenn eine Anlage eingesetzt wird? Oder vielleicht so nützlich: Was ist der beste Überschreibungspunkt, wenn Attribute geändert werden?

Update: I I oben gesagt, ob eine Anlage eingefügt wird nicht wissen, hatte. Es wird darauf hingewiesen, dass ich sagen kann, dass "ein" Anhang beteiligt ist, weil die Zeichenfolge den magischen NSAttachmentCharacter enthält. Aber ich werde keine spezifischen Informationen über den Anhang haben, bis die Bearbeitung abgeschlossen ist.

Antwort

4

würde ich einen Blick auf die Delegatmethode -textStorageDidProcessEditing :, NSTextStorage nehmen, die jedes Mal, wenn eine Änderung der zugrunde liegenden Textspeicher gemacht wird aufgerufen werden soll. Sie können dann die Methoden -editedRange, -editedMask und -changeInLength verwenden, um zu bestimmen, welcher Abschnitt des Textspeichers geändert wurde, und in diesem Bereich nach Anlagen suchen, die für Sie von Interesse sein könnten.

+0

Danke, Brian. Es ist nicht so ideal, wie ich es mir erhofft habe, aber es scheint, als würde es den Trick bringen. Es ist eine Schande, dass sie die Attribute in der sentChange ... -Methode nicht enthalten. – danielpunkass

+0

Soweit ich das beurteilen kann, '-textStorageWillProcessEditing:' erlaubt mehr Änderungen am Text als '-textStorageDidProcessEditing:'. Vielleicht möchten Sie das stattdessen verwenden. –

2

Sie vielleicht einen Blick auf zwei NSTextStorage Delegatmethoden nehmen wollen:

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

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

Innen textStorageWill/DidProcessEditing, können Sie rufen -[NSTextStorage editedMask] und -[NSTextStorage editedRange], um herauszufinden, was sich verändert und dann entsprechend Maßnahmen ergreifen.

+0

Hallo Jonathan - danke für das Kommentieren. Ich habe deine Antwort gewählt, aber ich habe beschlossen, Brian zu akzeptieren, weil es einige Momente früher war und weil es ein paar zusätzliche Stimmen angesammelt hatte. – danielpunkass

Verwandte Themen