> On Fri, Dec 23, 2016, at 09:16 PM, Daryle Walker wrote:
> The text controls on macOS use a NSTextStorage object to retain their
> text. That object is a extension of an attributed string. Let's say you
> use a NSString (or similar) in your document model. How should I get
> changes on one string to get mirrored on the other?
It depends on what you’re trying to do. The Cocoa text system is set up for two
modes: editing rich text, and editing non-rich text.
In the rich-text case, the NSTextStorage object is intended to *be* the model
object. It’s a long-lived object with its own optimized mutation scheme
(-beginEditing/-endEditing and the mutators it inherits from
NSMutableAttributedString), which is married to one particular NSTextView
instance in the window. This of course means it’s not a great fit for
frameworks like Core Data or Cocoa Bindings which expect model object
properties to be simple value types. You can bridge this gap with various
techniques, such as registering an object as the NSTextStorage’s delegate that
posts your own notifications or triggers change notifications for a synthesized
Core Data property.
The non-rich-text mode is more straightforward. In this mode, the NSTextStorage
is permanently married to the window’s field editor, and as focus moves around
the window its contents are batch-replaced with the underlying control’s
stringValue as focus moves around the window. The controller is expected to
listen to NSControl text editing notifications (possibly by acting as the
control’s delegate) to know when to push values to the model. It is expected to
use some other means, such as KVO, to push values from the model to the
control. Cocoa Bindings intends to do this two-way marshaling on your behalf.
--Kyle Sluder
>
> I think there are begin/end-editing flag methods on text controls, but
> how would I go the other way?
>
> Sent from my iPhone
___
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to arch...@mail-archive.com