Re: View-based outline view problem

2014-07-11 Thread Ken Thomases
On Jul 11, 2014, at 12:54 AM, Shane Stanley sstan...@myriad-com.com.au wrote:

 I'm still not quite out of the woods. In my cell-based outline view, when the 
 user selects an item and hits return to edit it, I change the selection so 
 that only the file name before the extension was selected. I do that with 
 text view delegate methods in my outline view subclass, but that doesn't work 
 with the view-based version. Is there some simple alternative?

Have you connected the delegate outlet of your text view (field?)?

Regards,
Ken


___

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

Re: View-based outline view problem

2014-07-11 Thread Quincey Morris
On Jul 10, 2014, at 23:34 , Ken Thomases k...@codeweavers.com wrote:

 Have you connected the delegate outlet of your text view (field?)?

This was my first thought, too, but:

1. The delegate method ‘control:textShouldBeginEditing:’ seems like it’s called 
too late. Presumably the selection change needs to be done when the text field 
gets first responder status, not when the text is actually changed.

2. It’s not obvious to me how the text field gets first responder status. In 
the TableViewPlayground sample code, it does, without any apparent support, so 
I assume this is something built into NSOutlineView - NSTableViewCell - 
textField outlet (when you press Return). I don’t know how you’d customize that 
if you have a non-standard table cell view. In particular, I don’t see how 
you’d know *when* this was happening.

I guess you could solve it with a NSTextField subclass that overrides becoming 
first responder. Or is there a more direct solution, do you think?

___

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

Re: View-based outline view problem

2014-07-11 Thread Shane Stanley
On 11 Jul 2014, at 4:34 pm, Ken Thomases k...@codeweavers.com wrote:

 Have you connected the delegate outlet of your text view (field?)?

Yes.

On 11 Jul 2014, at 4:54 pm, Quincey Morris 
quinceymor...@rivergatesoftware.com wrote:

 1. The delegate method ‘control:textShouldBeginEditing:’ seems like it’s 
 called too late. Presumably the selection change needs to be done when the 
 text field gets first responder status, not when the text is actually changed.

Right, that's what I tried and that's what I'm seeing.
 
 2. It’s not obvious to me how the text field gets first responder status. In 
 the TableViewPlayground sample code, it does, without any apparent support, 
 so I assume this is something built into NSOutlineView - NSTableViewCell - 
 textField outlet (when you press Return). I don’t know how you’d customize 
 that if you have a non-standard table cell view. In particular, I don’t see 
 how you’d know *when* this was happening.

FWIW, in my cell-based version I used 
textView:willChangeSelectionFromCharacterRange:toCharacterRange: in my outline 
view subclass. But that no longer seems to get called.

 I guess you could solve it with a NSTextField subclass that overrides 
 becoming first responder.

That's all I can think of. Just seems a lot of work for something that doesn't 
strike me as an uncommon need. 


-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/


___

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

Re: View-based outline view problem

2014-07-11 Thread Shane Stanley
On 11 Jul 2014, at 5:24 pm, Shane Stanley sstan...@myriad-com.com.au wrote:

 I guess you could solve it with a NSTextField subclass that overrides 
 becoming first responder.
 
 That's all I can think of.

Well not quite. I'm already overriding keyDown: in the outline view to show QL 
previews, so it might be easier to hang it off there. But it seems a bit icky.

-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/


___

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

Re: View-based outline view problem

2014-07-11 Thread Quincey Morris
On Jul 11, 2014, at 00:24 , Shane Stanley sstan...@myriad-com.com.au wrote:

 Just seems a lot of work for something that doesn't strike me as an uncommon 
 need. 

In such a case, it’s also worth re-considering your UI at a higher level.

I wonder, for example, whether there’s an alternative that uses *two* text 
fields. Put the file name in the ‘textField’ outlet field, and put the 
extension in a separate but adjacent field. Use auto-layout to keep both fields 
sized to their contents, and to keep the second field immediately adjacent to 
the first. If that’s actually possibly, it’ll look like a single string when 
not being edited, but will change the UI so that editing of the pieces is 
separate. (Or make the extension field uneditable, if you don’t actually allow 
it to be changed.) It might even be *better* than the old way. :)

Something like that.

___

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

Re: Cocoa-dev Digest, Vol 11, Issue 374

2014-07-11 Thread Shane Stanley
On 11 Jul 2014, at 7:44 am, João Varela joaocvar...@gmail.com wrote:

 Ithas been officially declared by Apple that cell-based NSOutlineView¹s and
 NSTableView's are deprecated.

Would you care to point to where? I'm not arguing, but you wouldn't think so 
from the documentation. I see: NSCell-based tables continue to be supported in 
OS X v10.7 and later, but they’re typically used only to support legacy code. 
That hints at deprecation at some stage, but I don't see that it has happened 
yet.

-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/


___

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

Re: View-based outline view problem

2014-07-11 Thread Shane Stanley

On 11 Jul 2014, at 5:44 pm, Quincey Morris 
quinceymor...@rivergatesoftware.com wrote:

 In such a case, it’s also worth re-considering your UI at a higher level.
 
 I wonder, for example, whether there’s an alternative that uses *two* text 
 fields. Put the file name in the ‘textField’ outlet field, and put the 
 extension in a separate but adjacent field. Use auto-layout to keep both 
 fields sized to their contents, and to keep the second field immediately 
 adjacent to the first. If that’s actually possibly, it’ll look like a single 
 string when not being edited, but will change the UI so that editing of the 
 pieces is separate. (Or make the extension field uneditable, if you don’t 
 actually allow it to be changed.) It might even be *better* than the old way. 
 :)

I'm open to all ideas. But I'm essentially trying to mimic what happens in the 
Finder, where name+extension can be edited as a unit, but not accidentally. I 
also want to keep some names unable to be edited at all. Your idea also raises 
the question of what will be selected when the user presses return and there 
are two text fields. If I understood how that process happened, I might find a 
better solution.

(And auto-layout is down the track for this .xib -- each time I start playing 
with that conversion, I seem to end up either crashing Xcode or producing an 
unreadable .xib. So it's one step into the future at a time.)


-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/


___

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

Re: View-based outline view problem

2014-07-11 Thread Ken Thomases
On Jul 11, 2014, at 2:24 AM, Shane Stanley sstan...@myriad-com.com.au wrote:

 FWIW, in my cell-based version I used 
 textView:willChangeSelectionFromCharacterRange:toCharacterRange: in my 
 outline view subclass. But that no longer seems to get called.

In general, an NSCell is owned by a control (instance of some subclass of 
NSControl).  An NSCell uses the field editor, an instance of NSText or a 
subclass (usually an NSTextView or subclass, more specifically), to handle the 
actual editing.  The field editor uses the control which owns the NSCell as its 
delegate.  That control receives the NSTextViewDelegate and, by extension, 
NSTextDelegate method calls.  Since an NSTextFieldCell is a kind of NSCell, all 
of the above applies to it, too.

In a cell-based outline view, the outline view is the control owning the 
NSTextFieldCell.  There's no actual NSTextField.  The text view which is the 
field editor uses the outline view as its delegate.  That's why it gets that 
delegate method.

In your view-based outline view, there's an actual NSTextField (or subclass).  
That's a control unto itself.  So, it (and not the outline view) serves as the 
field editor's delegate.  You can use a custom subclass of NSTextField and it 
will receive the delegate calls.  If you want, you can make your custom 
NSTextField forward the text view delegate methods to its own delegate.  So, 
your custom text field would not need to incorporate the logic specific to your 
outline view, it could just be a generic utility class.  (I'm a bit surprised 
that NSTextField doesn't already do this for those NSText[View]Delegate methods 
which don't already map to NSControlTextDelegate or the informal NSControl 
delegate methods.  Have you tried setting your text field's delegate to your 
outline view or some appropriate controller?)

Regards,
Ken


___

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

Re: awakeFromNib multiple objects - all connected?

2014-07-11 Thread Uli Kusterer
On 06 Jul 2014, at 08:54, Roland King r...@rols.org wrote:
 After awakeFromNib all the outlets are connected except for those to subviews 
 of the UIViewController's view, they remain nil until after viewDidLoad. 
 Other top-level object outlets are connected, but not the view nor its 
 subviews. I always felt that broke the awakeFromNib contract; the objects are 
 in the NIB, the outlets are in the NIB, surely they should be connected at 
 awakeFromNib. 

 The contract is that all outlets loaded from the current NIB are connected. If 
you have cascading NIB loads, then you get an awakeFromNib call for each NIB 
(at least on the Mac, I don’t think I’ve had nested NIBs on iOS in a while). 
That means that e.g. a view controller in a NIB will get one awakeFromNib 
because the items in the NIB it owns have been loaded and connected, and then a 
second one when its parent NIB has finished loading and it’s been connected to 
the other items surrounding it.

 Depending on when the inner view controller is asked to provide its view, it 
may not have been loaded yet, so obviously there’s nothing to connect to yet. 
E.g. if the surrounding NIB calls -view on the view controller in 
-awakeFromNib, then of course it is until then that the remaining outlets are 
connected.

 I don’t see how that would break any contracts, it is logical. The alternative 
would be to somehow violate encapsulation and have an inner object inform the 
outer object that it has a NIB that needs loading as well, and then have it 
modify the load order and trigger awakeFromNib calls on objects actually 
instantiated by its owner and … it would be very messy, at the latest once you 
have a view controller inside the NIB of a view controller inside of the app’s 
main NIB or whatever.

Cheers,
-- Uli Kusterer
“The Witnesses of TeachText are everywhere...”
http://zathras.de


___

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

Re: View-based outline view problem

2014-07-11 Thread Shane Stanley
On 11 Jul 2014, at 6:37 pm, Ken Thomases k...@codeweavers.com wrote:

 In general, an NSCell is owned by a control (instance of some subclass of 
 NSControl).  An NSCell uses the field editor, an instance of NSText or a 
 subclass (usually an NSTextView or subclass, more specifically), to handle 
 the actual editing.  The field editor uses the control which owns the NSCell 
 as its delegate.  That control receives the NSTextViewDelegate and, by 
 extension, NSTextDelegate method calls.  Since an NSTextFieldCell is a kind 
 of NSCell, all of the above applies to it, too.
 
 In a cell-based outline view, the outline view is the control owning the 
 NSTextFieldCell.  There's no actual NSTextField.  The text view which is the 
 field editor uses the outline view as its delegate.  That's why it gets that 
 delegate method.
 
 In your view-based outline view, there's an actual NSTextField (or subclass). 
  That's a control unto itself.  So, it (and not the outline view) serves as 
 the field editor's delegate.  You can use a custom subclass of NSTextField 
 and it will receive the delegate calls.  If you want, you can make your 
 custom NSTextField forward the text view delegate methods to its own 
 delegate.  So, your custom text field would not need to incorporate the logic 
 specific to your outline view, it could just be a generic utility class.  

Ken,

Thanks for the detailed explanation. I'll look into this approach.


 (I'm a bit surprised that NSTextField doesn't already do this for those 
 NSText[View]Delegate methods which don't already map to NSControlTextDelegate 
 or the informal NSControl delegate methods.  Have you tried setting your text 
 field's delegate to your outline view or some appropriate controller?)

Yes, I have, but with no joy.

-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/


___

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

Re: Issue with -[NSOutlineView autosaveExpandedItems]

2014-07-11 Thread Bill Cheeseman

On Jul 10, 2014, at 4:57 PM, Ken Thomases k...@codeweavers.com wrote:

 Are the items that result from unarchiving the persistent object the same 
 items as your data source returns via -outlineView:child:ofItem:?  I believe 
 they have to be the same by pointer identity, not just equal as by -isEqual:.

They are content-equal, but they can't be pointer-identical because I archive 
them to NSData objects and unarchive them using NSKeyedArchiver and 
NSKeyedUnarchiver. The reference document comes as close as possible to saying 
that we're supposed to use NSKeyedArchiver and NSKeyedUnarchiver  without quite 
actually saying so. For example, according to the NSOutlineViewDataSource 
reference for -outlineView:persistentObjectForItem:, the return value should be 
An archived representation of item. If this means we should use 
NSKeyedArchiver, which I assume it does, then pointer-identity couldn't be a 
requirement, could it? There is nothing in the reference document to suggest 
that pointer-identity is required, for what that's worth.

My items are standard NSDictionary objects, and I have confirmed that they are 
properly reconstituted in -outlineView:itemForPersistentObject.

 Rather than archiving the item itself, you should perhaps archive uniquely 
 identifying attributes of the item so that you can find the corresponding 
 item among the new model and return that.

Online discussions of this problem in the past have suggested that archiving 
unique strings works, and discussions in the Core Data context have suggested 
that using UUIDs works. But the reference document makes no suggestion that 
this is required. In fact, just after the quotation above, it goes on to say 
If the item is an archived object, this method may return the item. Having to 
implement UUIDs in my data source for the sole purpose of implementing 
expand/collapse state survival across application relaunches seems a bit much.

I did try calling -outlineView:itemForPersistentObject: myself in 
-awakeFromNib, matching the unarchived items to their counterparts in the 
datasource and loading the object from the datasource, and it didn't work. 
However, that was late in the day yesterday and I may not have gotten it quite 
right. I'll try again this morning. But this seems counter-intuitive, because I 
have confirmed that AppKit calls -outlineView:itemForPersistentObject: itself 
at launch, once for each archived item in user defaults. The documentation does 
not suggest in any way that I should call it myself, which would be counter to 
the normal behavior of datasource methods.

-- 

Bill Cheeseman - b...@cheeseman.name

___

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

Re: View-based outline view problem

2014-07-11 Thread Bill Cheeseman

On Jul 11, 2014, at 2:54 AM, Quincey Morris 
quinceymor...@rivergatesoftware.com wrote:

 I guess you could solve it with a NSTextField subclass that overrides 
 becoming first responder. Or is there a more direct solution, do you think?


Yes, that's exactly what I do, and it works. Override -[NSResponder 
becomeFirstResponder]. In fact, I think of that as the most direct solution. 
The NSResponder reference document says Subclasses can override this method to 
update state or perform some action such as highlighting the selection

The text fields in table and outline views attempt to become first responder 
when the user left clicks in them. That's wired into AppKit. This is explained 
somewhere in the documentation, but I forget where.

-- 

Bill Cheeseman - b...@cheeseman.name

___

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

Re: awakeFromNib multiple objects - all connected?

2014-07-11 Thread Roland King

 On 11 Jul 2014, at 5:33 pm, Uli Kusterer witness.of.teacht...@gmx.net wrote:
 
 On 06 Jul 2014, at 08:54, Roland King r...@rols.org wrote:
 After awakeFromNib all the outlets are connected except for those to 
 subviews of the UIViewController's view, they remain nil until after 
 viewDidLoad. Other top-level object outlets are connected, but not the view 
 nor its subviews. I always felt that broke the awakeFromNib contract; the 
 objects are in the NIB, the outlets are in the NIB, surely they should be 
 connected at awakeFromNib. 
 
 The contract is that all outlets loaded from the current NIB are connected. 
 If you have cascading NIB loads, then you get an awakeFromNib call for each 
 NIB (at least on the Mac, I don’t think I’ve had nested NIBs on iOS in a 
 while). That means that e.g. a view controller in a NIB will get one 
 awakeFromNib because the items in the NIB it owns have been loaded and 
 connected, and then a second one when its parent NIB has finished loading and 
 it’s been connected to the other items surrounding it.
 
 Depending on when the inner view controller is asked to provide its view, it 
 may not have been loaded yet, so obviously there’s nothing to connect to yet. 
 E.g. if the surrounding NIB calls -view on the view controller in 
 -awakeFromNib, then of course it is until then that the remaining outlets are 
 connected.
 
 I don’t see how that would break any contracts, it is logical. The 
 alternative would be to somehow violate encapsulation and have an inner 
 object inform the outer object that it has a NIB that needs loading as well, 
 and then have it modify the load order and trigger awakeFromNib calls on 
 objects actually instantiated by its owner and … it would be very messy, at 
 the latest once you have a view controller inside the NIB of a view 
 controller inside of the app’s main NIB or whatever.


ok so I wrote a test project for this. UIViewController subclass as file’s 
owner, a UIView subclass for its view, an extra test top-level object at the 
same level as the view, one button and one label as children of the view. I 
made the UIViewController subclass have outlets for the top-level object, the 
button and the label. Both the top-level object and the view had outlets for 
the button and the label and I hooked them all up. One NIB, all objects, 7 
connected outlets. 

Breakpointing in awakeFromNIB in the view controller and the top-level object 
showed that the outlets to the button and label were not hooked up, they were 
nil in both places. The VC was hooked up to the top-level object but that was 
the only connection which had been made.

That appears to violate that all outlets from the current NIB are connected. 

.. which made me wonder, so I looked at the actual project directory and found 
.. there are TWO nibs in there. Seems IB evilly splits the viewcontroller piece 
from the view piece and puts them in their own nibs, along with some extra 
information to hook the view’s objects in one NIB into the VC’s objects in the 
other when the view loads (ie hooking the button and label to the top-level 
object in the first NIB). 

That probably explains it. The original NIB just contains the VC and object, so 
awakeFromNIB only shows those two hooked up, the view load is a separate NIB 
load altogether. 

That is evil, thanks for the thought about more than one NIB, it make me check 
to see if my one NIB really was .. one NIB. 




___

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

Re: Cocoa-dev Digest, Vol 11, Issue 374

2014-07-11 Thread Yingshen Yu
Hi Shane,

It's in the 10.10 AppKit release notes. Also WWDC session What's new in
Cocoa has a fe slides.

-Jonny

Shane Stanley sstan...@myriad-com.com.au于2014年7月11日星期五写道:

 On 11 Jul 2014, at 7:44 am, João Varela joaocvar...@gmail.com
 javascript:; wrote:

  Ithas been officially declared by Apple that cell-based NSOutlineView¹s
 and
  NSTableView's are deprecated.

 Would you care to point to where? I'm not arguing, but you wouldn't think
 so from the documentation. I see: NSCell-based tables continue to be
 supported in OS X v10.7 and later, but they’re typically used only to
 support legacy code. That hints at deprecation at some stage, but I don't
 see that it has happened yet.

 --
 Shane Stanley sstan...@myriad-com.com.au javascript:;
 www.macosxautomation.com/applescript/apps/


 ___

 Cocoa-dev mailing list (Cocoa-dev@lists.apple.com javascript:;)

 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/yingshen.yu%40gmail.com

 This email sent to yingshen...@gmail.com javascript:;



-- 
Yingshen(Jonny) Yu
___

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

Re: Cocoa-dev Digest, Vol 11, Issue 374

2014-07-11 Thread Shane Stanley
On 11 Jul 2014, at 9:01 pm, Yingshen Yu yingshen...@gmail.com wrote:

 It's in the 10.10 AppKit release notes. Also WWDC session What's new in 
 Cocoa has a fe slides.


Thanks.

-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/

___

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

Re: Issue with -[NSOutlineView autosaveExpandedItems] - SOLVED

2014-07-11 Thread Bill Cheeseman

On Jul 10, 2014, at 4:20 PM, Bill Cheeseman wjcheese...@gmail.com wrote:

 How can I make an outline view reinstate the expanded and collapsed state of 
 its rows across application launches?


I finally realized that older code in my -awakeFromNib method was undoing 
everything that the datasource method -outlineView:itemForPersistentObject: was 
doing at application launch. NSLog calls showed me that the datasource method 
is called at launch BEFORE -awakeFromNib is called. Because I had been 
populating my datasource and expanding all rows in -awakeFromNib, I was 
canceling out what the datasource method had done. I would guess that most 
developers do this in -awakeFromNib, just as I did, because that's how Apple's 
sample projects do it. I haven't found any sample projects that use these 
datasource methods, so it didn't matter until I started trying to work them 
into my project.

As soon as I moved the code that populates the datasource into my view 
controller's designated initializer, and removed that code and the code that 
expanded the entire outline from -awakeFromNib, everything started working 
correctly.

So here are the basic requirements for setting up autosaveExpandedItems in an 
outline view:

1. Set autosaveExpandedItems in the outline view nib file or by calling 
-setAutosaveExpandedItems:YES. (And NSTableView's autosaveName must also be 
set, which is well documented.)

2. Implement the outline view datasource methods 
-outlineView:itemForPersistentObject: and -outlineView:objectForPersistentItem: 
by returning the results from -[NSKeyedArchiver archiveDataWithRootObject:] and 
-[NSKeyedUnarchiver unarchiveObjectWithData:]. In these methods, it is only 
necessary to archive the datasource item passed in to 
-outlineView:objectForPersistentItem:; no other processing is required. AppKit 
calls this datasource method at the moment you expand or collapse any row in 
the outline view, adding the archived item to user defaults when you expand it 
and removing it from user defaults when you collapse it. The autosave user 
defaults entry is an array of NSData objects constituting the archived 
datasource items for expanded rows only. The user defaults entry is named 
NSOutlineView Items autosave name. When you quit and later relaunch the 
application, AppKit calls -outlineView:itemForPersistentObject: once for each 
NSData object in the user defaults autosave entry. It does this before 
-awakeFromNib, so your datasource must be populated before that (e.g., in the 
designated initializer) or nothing will happen. Apparently (just guessing here) 
AppKit compares or subsitutes the unarchived user defaults objects with the 
datasource contents and expands any and all rows that match. Object-equality 
only is required, not pointer-identity, because AppKit can handle that issue 
behind the scenes whether it uses comparison or substitution. (It would seem 
that you could archive UUIDs or any other kind of unique identifier instead of 
the datasource item itself in -outlineView:objectForPersistentItem:, as long as 
you find or reconstruct the datasource item itself and return it in 
-outlineView:itemForPersistentObject:. This would be the way to go in a Core 
Data application.)

3. Populate the outline view's datasource in the controller's designated 
initializer.

4. In -awakeFromNib or equivalent, set up the initial expanded/collapsed state 
of rows in the outline view only once, at first launch on a given computer. 
Thereafter, leave it to the datasource methods to expand or collapse the 
outline view at launch based on the autosaved information from a previous run.

So simple. Too bad the reference document doesn't spell this out a little more 
clearly. (The problem faced by documentation writers is that, if they're any 
good, they know too much and it all seems perfectly obvious.)

-- 

Bill Cheeseman - b...@cheeseman.name

___

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

[NSDictionary objectForKey] crash on x64

2014-07-11 Thread Cosmin Apreutesei
Hi,

I have a strange problem.

I am using C and the objc runtime on OSX 10.9.3 to get a value from a
NSDictionary.

The objectForKey method returns an invalid pointer on x64 (not NULL,
but the same address 0x937 for _any_ valid key), but works fine on
i386.

I attached a small test case to show the problem.

Here's how to build and run the test case:

echo on 32bit works...
gcc -arch i386 -O2 test5.c -o test5_32 -lobjc
./test5_32

echo on 64bit crashes...
gcc -arch x86_64 -O2 test5.c -o test5 -lobjc
./test5


Any help would be appreciated, even to tell me that you can or can't
reproduce the problem or that you find problems with the code, or to
redirect me to a different forum/mailing list.

Thanks,
Cosmin.
#include assert.h
#include stdio.h
#include dlfcn.h

typedef struct objc_class*Class;
typedef struct objc_object   *id;
typedef struct objc_method   *Method;
typedef struct objc_selector *SEL;

struct objc_class  { Class isa; };
struct objc_object { Class isa; };

typedef id (*IMP) (id, SEL, ...);

Class objc_getClass(const char *name);
SEL sel_registerName(const char *str);
Method class_getInstanceMethod(Class aClass, SEL aSelector);
IMP method_getImplementation(Method method);

IMP cimp(const char* clsname, const char* selname) {
	Class  cls= objc_getClass(clsname) ; assert(cls != 0);
	SELsel= sel_registerName(selname)  ; assert(sel != 0);
	Method method = class_getInstanceMethod(cls-isa, sel) ; assert(method != 0);
	IMPimp= method_getImplementation(method)   ; assert(imp != 0);
	return imp;
}

IMP imp(id obj, const char* selname) {
	Class  cls= obj-isa   ; assert(obj != 0); assert(cls != 0);
	SELsel= sel_registerName(selname)  ; assert(sel != 0);
	Method method = class_getInstanceMethod(cls, sel)  ; assert(method != 0);
	IMPimp= method_getImplementation(method)   ; assert(imp != 0);
	return imp;
}

#define callc(clsname, selname, ctype, ...) (((ctype)cimp(clsname, selname)) ((id)objc_getClass(clsname), sel_registerName(selname), __VA_ARGS__))
#define callc0(clsname, selname, ctype) (((ctype)cimp(clsname, selname)) ((id)objc_getClass(clsname), sel_registerName(selname)))
#define call(obj, selname, ctype, ...)  (((ctype)imp (obj, selname)) (obj, sel_registerName(selname), __VA_ARGS__))
#define call0(obj, selname, ctype)  (((ctype)imp (obj, selname)) (obj, sel_registerName(selname)))

int main() {

	setvbuf(stdout, NULL, _IONBF, 0);

	dlopen(/System/Library/Frameworks/Foundation.framework/Foundation, RTLD_GLOBAL);

	{
	//making a NSNumber from scratch works...
	id n = callc(NSNumber, numberWithDouble:, id (*) (id, SEL, double), 12345); //make a NSNumber with value 12345
	printf(%p\n, (void*)n); //note the high address

	double x = call0(n, doubleValue, double (*) (id, SEL)); //get back the value
	printf(%f\n, x); //12345
	}

	//but getting a NSNumber from the dictionary below segfaults on 64bit (works on 32bit)...

	const char* path = /System/Library/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/HIServices.framework/Versions/Current/Resources/cursors/resizenorthwestsoutheast/info.plist;

	//create a dictionary from the contents of the info.plist file
	id spath = callc(NSString, stringWithUTF8String:, id (*) (id, SEL, const char*), path); //make a NSString with the value of `path`
	id d = callc(NSDictionary, dictionaryWithContentsOfFile:, id (*) (id, SEL, id), spath); //make a NSDictionary with contents of `path`

	//try to get the value of the key hotx from that dictionary
	id s = callc(NSString, stringWithUTF8String:, id (*) (id, SEL, const char*), hotx); //make a NSString with value hotx
	id n = call(d, objectForKey:, id (*) (id, SEL, id), s); //get the value of key hotx
	printf(%p\n, (void*)n); //note the low address

	s = callc(NSString, stringWithUTF8String:, id (*) (id, SEL, const char*), hoty); //make a NSString with value hoty
	n = call(d, objectForKey:, id (*) (id, SEL, id), s); //get the value of key hoty
	printf(%p\n, (void*)n); //note the same low address !!! what's going on here???

	double x = call0(n, doubleValue, double (*) (id, SEL)); //crash, of course...
	printf(%f\n, x); //should be 9

	return 0;
}

___

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

Re: [NSDictionary objectForKey] crash on x64

2014-07-11 Thread Scott Ribe
On Jul 11, 2014, at 6:56 AM, Cosmin Apreutesei cosmin.apreute...@gmail.com 
wrote:

 The objectForKey method returns an invalid pointer on x64 (not NULL,
 but the same address 0x937 for _any_ valid key), but works fine on
 i386.

Odds are, your dictionary is no longer there because it was dealloc'd. The fact 
that you did not (yet, at least) discover this bug on 32-bit is just 
coincidence. So check out your retain/release/autorelease handling of the 
dictionary.

-- 
Scott Ribe
scott_r...@elevated-dev.com
http://www.elevated-dev.com/
(303) 722-0567 voice





___

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

Re: [NSDictionary objectForKey] crash on x64

2014-07-11 Thread Bavarious
On 11 Jul 2014, at 09:56, Cosmin Apreutesei cosmin.apreute...@gmail.com wrote:
 Hi,
 
 I have a strange problem.
 
 I am using C and the objc runtime on OSX 10.9.3 to get a value from a
 NSDictionary.
 
 The objectForKey method returns an invalid pointer on x64 (not NULL,
 but the same address 0x937 for _any_ valid key), but works fine on
 i386.
 
 I attached a small test case to show the problem.
 
 Here's how to build and run the test case:
 
 echo on 32bit works...
 gcc -arch i386 -O2 test5.c -o test5_32 -lobjc
 ./test5_32
 
 echo on 64bit crashes...
 gcc -arch x86_64 -O2 test5.c -o test5 -lobjc
 ./test5
 
 
 Any help would be appreciated, even to tell me that you can or can't
 reproduce the problem or that you find problems with the code, or to
 redirect me to a different forum/mailing list.

Since Lion and on 64-bit programs, some NSNumber instances are not represented 
by full Objective-C objects. Instead, they are represented directly in the 
(tagged) pointer. I wrote about this when Lion came out:

http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in

and Mike Ash also wrote about it:

https://www.mikeash.com/pyblog/friday-qa-2012-07-27-lets-build-tagged-pointers.html

The layout has changed since then (IIRC type encoding is different now) but, in 
general, if you get an object pointer whose least significant bit is set (i.e., 
its integer representation is an odd number), then it’s a tagged pointer. Since 
the pointer does not point to a valid object, you cannot call an IMP on it 
directly. You should still be able to use it as the first argument to 
objc_msgSend(), though. Remember to cast objc_msgSend() to the corresponding 
function pointer type.

For Objective-C questions, you can write to objc-language@lists.


___

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

Re: View-based outline view problem

2014-07-11 Thread Shane Stanley
In case anyone's following along, I followed Ken's suggestion and made a 
subclass of NSTextField, and moved my 
textView:willChangeSelectionFromCharacterRange:toCharacterRange: delegate 
method there. 

I also followed Bill's suggestion of overriding becomeFirstResponder so that I 
could disallow editing of some names. For the editable names I had to include 
[self selectText:self] before returning YES, or the field rather than the text 
was selected.

I presume I now need to replace 
outlineView:setObjectValue:forTableColumn:byItem: with an action method 
triggered by the text field.

Thanks for the tips.

-- 
Shane Stanley sstan...@myriad-com.com.au
www.macosxautomation.com/applescript/apps/


___

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

Re: [NSDictionary objectForKey] crash on x64

2014-07-11 Thread Cosmin Apreutesei
Hi Bavarious,

Thanks a lot for the links and explanation. That was very helpful.
___

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

Re: Converting Database to Core Data

2014-07-11 Thread Rick Aurbach
On Jul 11, 2014, at 1:34 AM, cocoa-dev-requ...@lists.apple.com wrote:

 Message: 2
 Date: Thu, 10 Jul 2014 15:00:32 -0500
 From: William Squires wsqui...@satx.rr.com
 To: Cocoa Developers cocoa-dev@lists.apple.com
 Subject: Converting database to Core Data
 Message-ID: cc08d0e6-7d0e-433a-94b0-e895c8960...@satx.rr.com
 Content-Type: text/plain; charset=us-ascii
 
  I'm trying to convert the following. I have two tables in a database, 
 TransactionEntry, and ReasonCode. A TransactionEntry record is just a 
 posting from a POS (Point-of-Sale) terminal, and has these fields (of 
 interest):
 
 Table (TransactionEntry)
  ID As Int32
  PrimaryReasonCode As Int32   // both of these link to ReasonCode.ID
  SecondaryReasonCode As Int32
  ...
 
 and a ReasonCode record is used when a certain types of transactions occur, 
 such as POSItemReturned, POSItemVoided, POSCommError, and a few others.
 
 Table (ReasonCode)
  ID As Int32
  Description As Varchar(50)
  ReasonCode As Int16 // just an enum
  ...
 
  All would be good and well if the TransactionEntry table had only one 
 reference (.PrimaryReasonCode) to the ReasonCode table, but some transactions 
 (such as a voided item) require the manager to fill in both the primary and 
 secondary reason codes. I can create the entities, and replace the Int32 
 record numbers/IDs with a relationship.
  I create the relationship in entity TransactionEntry and set it to 
 ReasonCode, leaving the inverse relationship to none for now. I then 
 create an inverse relationship in entity ReasonCode to refer back to 
 TransactionEntry. Now I can create the inverse relationships in both 
 directions. 1:1 for TransactionEntry - ReasonCode, and 1:many for ReasonCode 
 - TransactionEntry. All okay so far.
  Primary ReasonCode records (entities) are re-used to save memory, and the 
 .Description fields are pre-set to values such as, return item, wrong key 
 hit, cc reader not working, etc... Secondary ReasonCode entities are 
 (usually) created on-demand from the POS terminal when the manager logs in. A 
 few are re-used, but mostly new entities are created. The problem now comes 
 when I try to create the same relationships from TransactionEntry entities to 
 ReasonCode entities for the secondary reason code records (entities), since 
 it won't let me make both inverse relationships 1:many from ReasonCode back 
 to TransactionEntry.
  Is this a limitation of CoreData? Or is there a way around this? Can I 
 ignore Xcode's warnings about not having inverse relationships, and simply 
 set the inverse relationships from the TransactionEntry entity(ies) to the 
 ReasonCode Entity to none, and simply get rid of the inverse relationships 
 in the ReasonCode entity?
  Please help! :)

I think I can see where there is a problem. From the standpoint of your 
TransactionEntry record, you have two relationships to a secondary table. 
However, from the standpoint of the secondary table, you have two connections 
to the SAME object. I can imagine that this would be confusing.

Suppose you tried a different approach. Let’s say you create a SINGLE many-many 
connection between the TransactionEntry table and the ReasonCode table. The 
primary and secondary reason codes then simply become items in the set of 
ReasonCodes.  On the TransactionEntry side of things, use an OrderedSet, so you 
can always make the primary reason code the first item… (Theoretically, you 
could then have MORE than two reason codes, but you could easily prevent that 
if you didn’t want the feature.)

Please note that if you take this approach, you will find that Core Data 
auto-generates a .h file for the TransactionEntry table that defines methods 
which don’t exist in Core Data. (This is an old, well-known problem. Google 
“Core Data Ordered Set”.) You can read more about this problem at 
http://cypressnorth.com/programming/nsinvalidargumentexception-with-nsorderedsets-using-coredata/
 and find a “standard workaround” at 
https://github.com/CFKevinRef/KCOrderedAccessorFix. (Basically, the CocoaPod 
just implements the missing methods.)


Cheers,

Rick Aurbach
Aurbach  Associates, Inc.

___

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

Re: Issue with -[NSOutlineView autosaveExpandedItems] - SOLVED

2014-07-11 Thread Lee Ann Rucker

On Jul 11, 2014, at 5:35 AM, Bill Cheeseman wrote:

 
 
 4. In -awakeFromNib or equivalent, set up the initial expanded/collapsed 
 state of rows in the outline view only once, at first launch on a given 
 computer. Thereafter, leave it to the datasource methods to expand or 
 collapse the outline view at launch based on the autosaved information from a 
 previous run.

Also, don't use the presence or absence of the autosaved prefs item as an 
indicator of whether you've autoexpanded already, because the pref only saves 
the array of expanded items and if everything's collapsed, it'll just remove 
the pref entirely.
___

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

Re: View-based outline view problem

2014-07-11 Thread João Varela


On 11 Jul 2014, at 7:44 am, João Varela joaocvar...@gmail.com wrote:

Ithas been officially declared by Apple that cell-based NSOutlineView¹s
and
NSTableView's are deprecated.

Would you care to point to where? I'm not arguing, but you wouldn't think
so from the documentation. I see: NSCell-based tables continue to be
supported in OS X v10.7 and later, but they’re typically used only to
support legacy code. That hints at deprecation at some stage, but I
don't see that it has happened yet.

First of all my apologies for not having changed the subject of my first
email. 

You can check that formal declaration in the WWDC 2014 video called
“What’s new in Cocoa”. Fast forward to 51:00 and you’ll see that formal
declaration. Everything that is NSCell- and NSMatrix-based is deprecated
or on its way to formal deprecation.


HTH

João Varela



___

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

Re: Issue with -[NSOutlineView autosaveExpandedItems] - SOLVED

2014-07-11 Thread Bill Cheeseman

On Jul 11, 2014, at 3:10 PM, Lee Ann Rucker lruc...@vmware.com wrote:

 On Jul 11, 2014, at 5:35 AM, Bill Cheeseman wrote:
 
 4. In -awakeFromNib or equivalent, set up the initial expanded/collapsed 
 state of rows in the outline view only once, at first launch on a given 
 computer. Thereafter, leave it to the datasource methods to expand or 
 collapse the outline view at launch based on the autosaved information from 
 a previous run.
 
 Also, don't use the presence or absence of the autosaved prefs item as an 
 indicator of whether you've autoexpanded already, because the pref only saves 
 the array of expanded items and if everything's collapsed, it'll just remove 
 the pref entirely.


Right.

And I've discovered another difficulty, although I think I can handle it. When 
you add, remove or edit a row that is a child of an expanded parent item, 
AppKit does not automatically call -outlineView:persistentObjectForItem: to 
update the autosaved data for the parent. Therefore, when you quit and relaunch 
the application, the new expanded parent item does not match the old expanded 
parent item autosaved in user defaults, and 
-outlineView:itemForPersistentObject: does not find a match. As a result, it 
returns nil and AppKit collapses the parent item on relaunch. The same thing 
will happen to an edited row if it was expanded before being edited. I think 
this issue is inherent in the autosave mechanism as Apple has implemented it.

One way to handle this might be to collapse and expand the affected row 
programmatically (and invisibly to the user) in order to trigger the datasource 
methods. Not elegant, but I think it ought to work.

Another way to handle it would be to retrieve the autosaved data when you add, 
delete or edit an expanded item, add the new data by calling 
-outlineView:persistentObjectForItem: explicitly, and saving it back to user 
defaults. I'm half way through doing this now, and it isn't quite as messy as I 
thought it might be -- but still pretty messy.

A third way to handle it would be to go the autosaved UUID route. The autosaved 
UUIDs would still be correct after quit and relaunch, and you could retrieve 
the revised items directly from the datasource in your implementation of the 
-outlineView:itemForPersistentObject: method. The datasource is always up to 
date by definition, and you would never encounter a mismatch.

I fear the third approach might be the best. I hate to have to add a UUID to 
every item in the datasource, but Apple does provide a Cocoa UUID class to make 
it easy.

Can anybody suggest another approach? It's time for me to quit for the day.

-- 

Bill Cheeseman - b...@cheeseman.name

___

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

Re: Issue with -[NSOutlineView autosaveExpandedItems] - SOLVED

2014-07-11 Thread Gary L. Wade
On 7/11/2014, 1:29 PM, Bill Cheeseman wjcheese...@gmail.com wrote:

 And I've discovered another difficulty, although I think I can handle it.


Sounds like it’s time to update Cocoa Recipes to a 3rd edition to fully
share these nuggets.
--
Gary L. Wade
http://www.garywade.com/



___

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

Re: LSUIElement, NSStatusItem, and NSSearchField

2014-07-11 Thread Jerry Krinock
Lee Ann, I have a similar requirement in my apps, and settled on adding a menu 
item titled “Search”.  When user clicks “Search”, the menu disappears and a 
tiny window with a search field pops up.  It would be nice to have a search 
field in the menu (like the standard “Help” menu does), but as you are finding, 
navigating between the limitations of NSMenu and the bugs in bringing apps 
foreground does not leave many alternatives.  Don't waste too much time on it.

The bugs in bringing apps foreground changed in OS X 10.9.  So if you’re 
supporting 10.8-, be sure to test there too.  And, or course, 10.10.


___

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