Re: Some crash.
Re: Some crash.
- Subject: Re: Some crash.
- From: Sandro Noel <email@hidden>
- Date: Sun, 03 Aug 2008 12:31:26 -0400
Clark, thank you!
Great Example.
I just find it sad, that implementing KVC-KVO, is not enough to get
the ball rolling,
and that i have to proxy my model classes to make it work. :(
I guess i'll have to rethink my Model classes :) and really separate
functionality from data.
even if that functionality is manipulating the data itself.
Ah, still learning :)
Sandro.
On 3-Aug-08, at 11:56 AM, Clark Cox wrote:
On Sat, Aug 2, 2008 at 9:15 PM, Sandro Noel <email@hidden>
wrote:
Chris.
Thank you for the explaination!!
but it leaves me with a question, where should i use it.
I'm actually adding objects to the array, using addObject message,
in the
model,
where should i use the mutableArrayValueForKey, and what keyPath
should I
use.
My general strategy for this is to never access the instance variable
directly, except when implementing init, dealloc and the KVC
accessors. All other access (even from other methods of the same
class) uses the proxy returned by mutableArrayValueForKey:. Something
like:
@interface MyClass : NSObject {
NSMutableArray *myObjects;
}
@end
@implementation MyClass
-(id)init {
if(self = [super init]) {
myObjects = [[NSMutableArray alloc] init];
}
return self;
}
-(void)dealloc {
[myObjects release];
[super dealloc];
}
-(NSUInteger)countOfMyObjects {
return [myObjects count];
}
-(id)objectInMyObjectsAtIndex:(NSUInteger)index {
return [myObjects objectAtIndex: index];
}
-(void)insertObject:(id)object inMyObjectsAtIndex:(NSUInteger)index {
[myObjects insertObject: object atIndex: index];
}
-(void)removeObjectFromMyObjectsAtIndex:(NSUInteger)index {
[myObjects removeObjectAtIndex: index];
}
-(void)doSomething {
NSMutableArray *arrayProxy = [self mutableArrayValueForKey:
@"myObjects"];
[arrayProxy addObject: ...];
[arrayProxy removeObjectAtIndex: ...];
//Or any other NSMutableArray calls
}
@end
That way, all edits to the array provide the appropriate notifications
to any observing objects. It also allows me to change the
implementation at a future date, and only have to change the
accessors. The reason that it is safe to access the array directly in
init and dealloc is that another object can't yet be listening at the
time of init (also the reason that your code worked when you initially
filled the array), and by the time of -dealloc, all of the observers
should have stopped their listening.
the workflow is quite simple, the user selects a file, the
controller calls
my model to load the file in various classes,
and one of the property of the model is transactions which is a
MutableArray,
that array is bound to the array controller, which is in turn
providing the
tableview with data.
I'm new to cocoa... sorry bout that.
thank you for your help.
--
Clark S. Cox III
email@hidden
_______________________________________________
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