> On 17 Jun 2017, at 14:21, Charles Srstka <cocoa...@charlessoft.com> wrote: > >> On Jun 17, 2017, at 5:32 AM, Jonathan Mitchell <li...@mugginsoft.com >> <mailto:li...@mugginsoft.com>> wrote: >> >>> On 16 Jun 2017, at 23:18, Quincey Morris >>> <quinceymor...@rivergatesoftware.com >>> <mailto:quinceymor...@rivergatesoftware.com>> wrote: >>> >>> On Jun 16, 2017, at 14:41 , Jonathan Mitchell <li...@mugginsoft.com >>> <mailto:li...@mugginsoft.com>> wrote: >>>> >>>> I sometimes use the default NSObject bind: to set up a simple one way >>>> operation as you describe as opposed to a discrete observation. >>> >>> With macOS 10.13, the new block/closure-based KVO “addObserver” method is >>> probably an easier way, although you do have to remove it manually. >>> >> The block/closure improvements are long overdue IMHO. >> >> I use a home brewed approach using BPBlockValueTransformer : >> NSValueTransformer with bindings that gives a lot more flexibility. >> A trivial example involving a closure would be: >> >> BPBlockValueTransformer *blockValueTransformer = [BPBlockValueTransformer >> valueTransformerWithBlock:^id(NSNumber *value) { >> strongify(self); >> return ([value boolValue] || self.isFree)? @“Freedom for all" : >> @“Freedom for no-one"; >> }]; >> [self.titleTextField bind:NSValueBinding toObject:self.repObjCon >> withKeyPath:@"selection.isHidden" options:@{NSValueTransformerBindingOption >> : blockValueTransformer}]; >> >> The downside is that you cannot establish the binding in the NIB. > > It’s definitely overdue; I’ve been using a blocks-based wrapper around KVO > for years. Is that a publicly available wrapper?
> > A couple of notes, though, re-reading the message this replied to. The new > blocks-based API, ‘observe()’, is actually part of the Swift overlay, which > means it works on older macOS versions, not just 10.13. Also, you don’t have > to remove it manually, and that’s in fact one of its major features—it > automatically deregisters itself whenever the observer falls out of scope. So > as long as you make sure you don’t set up a retain cycle with captured > values, you can just stash the observer in an ivar, and when your object gets > deallocated, your observer will be unregistered. Much easier than what we had > to do before. It would be good if I could get this to work all the way back to 10.9 (that’s my deployment target). Accurately managing observation and object lifetimes is such a big time sink that any improvement is always welcome. J _______________________________________________ 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