element119
element119

Reputation: 7625

Objective-C NSString Assignment Problem

In my Cocoa application, in the header file, I declare a NSString ivar:

NSString *gSdkPath;

Then, in awakeFromNib, I assign it to a value:

gSdkPath = @"hello";

Later, it's value is changed in the code:

gSdkPath = [NSString stringWithString:[folderNames objectAtIndex:0]];

(the object returned from objectAtIndex is an NSString)

However, after this point, in another method when I try to NSLog() (or do anything with) the gSdkPath variable, the app crashes. I'm sure this has something to do with memory management, but I'm beginning with Cocoa and not sure exactly how this all works.

Thanks for any help in advance.

EDIT: This was solved by retaining the string [gSdkPath retain].

Upvotes: 1

Views: 749

Answers (1)

Jakob Borg
Jakob Borg

Reputation: 24425

(the object returned from objectAtIndex is an NSString)

Are you sure? I suggest putting this in it's own temporary variable and double checking that it's not nil or invalid in some way.

Edit: If that is OK so far, do note that stringWithString returns an autoreleased object. You need to retain it if you want to use it "later".

gSdkPath = [NSString stringWithString:[folderNames objectAtIndex:0]];
[gSdkPath retain];

Upvotes: 2

Related Questions