Hi,

Sorry, I wasn’t very clear, the VC is my existing VC with the Source Vice Code 
from “myViewController” code added so this had to be converted to use manual 
memory management. I also converted the other supporting classes although as 
you point out, I could have just set the compiler flag.

Here are the property definitions from ChildNode:

// BaseNide.h

@interface BaseNode : NSObject <NSCoding, NSCopying>
{
}

@property (nonatomic,retain) NSString*                  nodeTitle;
@property (nonatomic,retain) NSImage*                   nodeIcon;
@property (nonatomic,retain) NSMutableArray*            children;
@property (nonatomic,retain) NSString*                  urlString;
@property (nonatomic,assign) BOOL                               isLeaf;


// ChildNide.h

@interface ChildNode : BaseNode

———————

Here are the property definitions from ImageAndTextCell:

@property (nonatomic,retain) NSImage*                                   
pTextCellImage;

These two are in the View Controller Itself:

@property (nonatomic,retain) NSImage*                                   
pFolderImage;
@property (nonatomic,retain) NSImage*                                   
pURLImage;

Thanks for your help, I’ve worked on loads of Projects where I’ve had to 
convert to/from ARC, but never had a problem like this. I’ve obviously missed 
something, but I’ve been all over the code and it all looks fine. I am worried 
that the Analyser isn’t showing a problem though, I’ve come to rely on it quite 
a bit and the fact that I’ve seem it get it wrong a couple of times makes me 
wonder…..

All the Best
Dave

> On 26 May 2015, at 19:34, Dave <d...@looktowindward.com> wrote:
> 
> Hi,
> 
> I’ve incorporated the Tree Controller in SourceView. SourceView shows a Split 
> View with a tree structure on the left and either shows the contents of a URL 
> or a List of Files on the right, depending on which item is selected in the 
> left view.
> 
> The SourceView project is built using ARC, but my App uses Manual Memory 
> Management. When I moved the code over, I changed it to use release etc. and 
> changed any properties or iVar’s to use retain or assign. The problem builds 
> with no analyser warnings (which doesn’t mean as much as it used to, because 
> I’ve found that the Analyser in XCode 6.3 is buggy).
> 
> When I run the App, it displays the Tree View fine and Populates the two 
> sections, but it crashes due to an over-release if I select a file based item 
> - I found this by using NSZombies - it gives the error:
> 
> *** -[NSImage release]: message sent to deallocated instance 0x20e5b9fc0
> 
> I traced the problem down to the method copies below - please see comments in 
> code. I’ve stopped it crashing by adding a retain although it doesn’t display 
> the Files Correctly so there is something else wrong. I can’t figure out why 
> I need this extra retain since everything seems to balanced without it.
> 
> Any ideas how to debug this would be greatly appreciated.
> 
> All the Best
> Dave
> 
> - (void)outlineView:(NSOutlineView *)olv willDisplayCell:(NSCell*)cell 
> forTableColumn:(NSTableColumn *)tableColumn item:(id) item
> {      
> NSImage*                                      iconImage;
> NSString*                                     urlStr;
> ImageAndTextCell*                     myCell;
> ChildNode*                                    myChildNode;
> 
> if ([[tableColumn identifier] isEqualToString:COLUMNID_NAME] == NO)
>       return;
> 
> // we are displaying the single and only column
> if ([cell isKindOfClass:[ImageAndTextCell class]] == NO)
>       return;
> 
> iconImage = nil;      
> myChildNode = [item representedObject];
> if (myChildNode != nil)
>       {
>       if (myChildNode.isLeaf == YES)
>               {
>               urlStr = myChildNode.urlString;
>               if (urlStr != nil)
>                       {
>                       if ([myChildNode.urlString hasPrefix:HTTP_PREFIX])
>                               {
>                               myChildNode.nodeIcon = self.pURLImage;
>                               }
>                       else
>                               {
>                               iconImage = [[[NSWorkspace sharedWorkspace] 
> iconForFile:urlStr] copy];  //Crashes without retain or if I remove the copy 
> and and release statement below
> 
>                               LogIfDave(@"Before Get File iconImage - 
> retainCount: %ld",[iconImage retainCount]);
>                               myChildNode.nodeIcon = iconImage;
> //*****                               [iconImage release];                    
>                                 //** Crashes if 
> Present!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> 
>                               LogIfDave(@"After set Item iconImage - 
> retainCount: %ld",[iconImage retainCount]);
>                               }
>                       }
>               }
>       }
> else
> //**
> //**  Check if it's a special folder (PLACES or BOOKMARKS), we don't want it 
> to have an icon
> //**
>       {
>       if ([self isSpecialGroup:myChildNode])
>               {
>               myChildNode.nodeIcon = nil;
>               }
>       else
>               {
>               myChildNode.nodeIcon = self.pFolderImage;
>               }
>       }
>                       
> // set the cell's image
> [myChildNode.nodeIcon setSize:NSMakeSize(kIconImageSize,kIconImageSize)];
> myCell = (ImageAndTextCell*) cell;
> 
> iconImage = myChildNode.nodeIcon;
> 
> if (iconImage != nil)
>       LogIfDave(@"Before set pTextCellImage - retainCount: %ld",[iconImage 
> retainCount]);
> 
> //*** This line causes a crash if the [iconImage release]; statement above is 
> executed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> 
> myCell.pTextCellImage = iconImage;
> 
> if (iconImage != nil)
>       LogIfDave(@"After set Item pTextCellImage - retainCount: 
> %ld",[iconImage retainCount]);
> }
> 
> 
> _______________________________________________
> 
> 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/dave%40looktowindward.com
> 
> This email sent to d...@looktowindward.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

Reply via email to