Re: Undo with NSArrayController
Re: Undo with NSArrayController
- Subject: Re: Undo with NSArrayController
- From: Kevin Bracey <email@hidden>
- Date: Thu, 27 Jan 2011 18:27:25 +1300
Thank you once again, for you invaluable help
After breaking this out into a single use project I found that I'd tripped up on spelling
removeObjectFromTestArrayAtIndex
removeObjectfromTestArrayAtIndex
so the Undo was calling the Lower f and that wasn't KVO so the NSArrayController didn't get the nod to update the TableView correctly.
Spending 4 hours tracking this won't be as bad as explaining to the boss;-)
Thanks
Kevin
On 27/01/2011, at 5:02 PM, Quincey Morris wrote:
> On Jan 26, 2011, at 19:44, Kevin Bracey wrote:
>
>> This is not Core Data.
>
> Er, sorry. I think there was a Core Data vs undo thread recently and I confused that with this.
>
>> MyDocument has the NSMutableArray *allImportHeaders, MyDocument has the KVC insert and remove messages for this.
>>
>> I have an NSArrayController bound to allImportHeaders for it's content .
>> The NSTableView Columns bound to the NSArrayController arrangedObject.xxFieldNames.
>>
>> I found that sending the NSArrayController a rearrangeObjects fixes this problem.
>
> If the property is being changed KVO compliantly every time, including on undo and redo, this shouldn't be necessary. The converse is also true -- if it's necessary, there is (theoretically) a bug somewhere in your code or design. However, given the inscrutability of the interactions between undo and NS...Controller objects, I'd say go ahead with whatever seems to work. (Until it doesn't any more.)
>
>> I'm now studying the iSpend example and I see a couple of things:
>> 1. It only implements - (void)insertTransactions:(NSArray *)objects atIndexes:(NSIndexSet *)indexes and - (void)removeTransactionsAtIndexes:(NSIndexSet *)indexes not the other KVO messages. I wonder why it doesn't do the rest.
>
> It doesn't need to. There only has to be one insert method and one remove method. Implementation of the other 4 methods is optional.
>
>> 2. It uses KVO to listen to those and does the setting of Undo of the Insert and Remove there.
>> 3. The SubClass of NSArrayController is also Listening for its @"contentArray" to change and is sending it's self a rearrangeObjects if it does.
>> 4. To Implement Undo in the Model object Transaction, they pass in the Document to all the Transaction objects so it can access the UndoManager, seems a bit anti MVC.
>
> I haven't looked at iSpend recently, but it used to be a very strange app. It did some things in convoluted ways to demonstrate advanced techniques. I don't know what shape it's in now, but I'd tend to use it as a technology reference more than a pattern for app design.
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden