On Feb 18, 2010, at 9:17 AM, Gustavo Pizano wrote:
> HEllo Corbin,
> It seem its fixed, I didn't realize an ivar in the Custom NSCell, I forgot I
> put it there thinking in using it to hold the name of the user and be able to
> sort the table, which right now I can;t tell how to do it, I took out that
> ivar, and it hasn't crash so far.. still Im gonna keep trying to make it
> crash and if it happens, then I will do what you suggested.
Ah! So it was the extra ivar in your custom cell. That's was my initial guess.
the extra ivar is okay; you just have to retain or copy it in the cell's
implementation of -copyWithZone:
corbin
>
> Thanks for the help and the blog link.. I learned a something else I wished
> to know but didn't know where to find it.
>
> Gustavo
>
> On Feb 18, 2010, at 5:06 PM, Corbin Dunn wrote:
>
>>
>> On Feb 18, 2010, at 12:24 AM, Gustavo Pizano wrote:
>>
>>> Hello Corbin.
>>>
>>> ok, so I read your blog post, its great, I love it.
>>>
>>> I followed what you said there with my application, when the app crashes I
>>> see the address, I search for it and I see only one result, so I click the
>>> arrow next to the address to check the history and I have this situation.
>>> first I have a Malloc, responsible CoreData, responsible caller [NSSQLCore
>>> _prepareResultsFromResultSet:usingFetchPlan:withMatchingRows:],
>>> and right after that event I have the Zombie. responsible CoreData,
>>> Responsible caller [NSManageObject objectDictionaryWithValuesForKeys:]
>>
>> There should be a free event at some point; make sure you check the option
>> to keep track of all retain/releases -- look for the last release. That
>> callstack is the last person who "owned" the object had it, and released it.
>> Based on that information, you need to some how ensure it is retained longer
>> than that time period.
>>
>> corbin
>>
>>
>>>
>>> So when I click the zombie and check the extended view, the last line of
>>> code that I have control over is the accessor for the userDictionary
>>> attribute in the User ManagedObject, which has these lines of code.
>>>
>>> -(NSDictionary *)userDictionary{
>>> return [self dictionaryWithValuesForKeys:[NSArray
>>> arrayWithObjects:@"firstName",@"lastName",@"avatar",@"title",nil]];
>>> }
>>>
>>> I also have this line of code in the User ManageDObject
>>> +(NSSet *)keyPathsForValuesAffectingUserDictionary{
>>> return [NSSet
>>> setWithObjects:@"firstName",@"lastName",@"avatar",@"title",nil];
>>> }
>>> dunno if this affects in somehow.. I stilld on't get what for is it, i
>>> think its to track changes of the object for those keys.
>>>
>>> So, if I have comming back to the initial quesiton, if I have no ivars in
>>> the cusotm NSCell, Im just drawing the values in the values like this
>>>
>>> -(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
>>>
>>> NSDictionary * cellValues = [self objectValue];
>>> NSString * firstName = [cellValues valueForKey:@"firstName"];
>>> NSString * lastName = [cellValues valueForKey:@"lastName"];
>>> ....
>>> ...
>>> }
>>> then what am I doing wrong?
>>>
>>> thx.
>>> Gustavo
>>>
>>>
>>> On Feb 17, 2010, at 11:31 PM, Corbin Dunn wrote:
>>>
>>>>
>>>> On Feb 17, 2010, at 2:14 PM, Gustavo Pizano wrote:
>>>>
>>>>>
>>>>> On Feb 17, 2010, at 11:03 PM, Jim Correia wrote:
>>>>>
>>>>>> On Feb 17, 2010, at 4:41 PM, Gustavo Pizano wrote:
>>>>>>
>>>>>>> Maybe I misunderstood I must conform NSCopying protocol also even when
>>>>>>> using core data?
>>>>>>
>>>>>> If you have an NSCell subclass which adds iVars, you must implement
>>>>>> -copyWithZone: to do correct memory management.
>>>>>>
>>>>>> Your -copyWithZone: needs to work correctly within the bounds of the
>>>>>> object ownership rules.
>>>>>>
>>>>>> If you have an object iVar which shouldn’t be copied, but is still an
>>>>>> owned reference, then you can (and must) retain it instead in the copy.
>>>>>>
>>>>>> (You should do this for all cells with iVars, not just ones with object
>>>>>> iVars, so that your subclass will behave correctly in the future even if
>>>>>> NSCell doesn’t implement its behavior using NSCopyObject.)
>>>>>>
>>>>>> - Jim
>>>>>
>>>>> Hello Jim
>>>>> HMM digging more into the problem.. definitely it seems because Im not
>>>>> copying properly the NSManagedObject Paul Robinson says in one old post:
>>>>>
>>>>> "The short answer is that you need to override the setObjectValue: method
>>>>> (which tries to copy your uncopyable NSManagedObject) in your custom
>>>>> NSCell to convert your NSManagedObject into an NSValue (which is
>>>>> copyable)."
>>>>>
>>>>>
>>>>> And taking what you said, so if my User ManagedObject returns me the
>>>>> NSDictionary with the key-value of its attributes, then in the cell I
>>>>> must set it as an ivar within the method setObjectValue, then implement
>>>>> the copyWithZone and return the copy of it isn't it? right now I don't
>>>>> have any ivar in my custom cell.. sooo . := :S.
>>>>
>>>> I think Jim and I are leading you off track; if your cell has no extra
>>>> ivars, then you don't have to worry about the cell implementing
>>>> copyWithZone:.
>>>>
>>>> I still think you should read my blog posting and see why the crash
>>>> happens with zombies on.
>>>>
>>>> corbin
>>>
>>
>
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]