Re: problems in runModal in NSOpenPanel used with defaults
Re: problems in runModal in NSOpenPanel used with defaults
- Subject: Re: problems in runModal in NSOpenPanel used with defaults
- From: Corbin Dunn <email@hidden>
- Date: Mon, 29 Sep 2008 08:47:12 -0700
On Sep 26, 2008, at 10:34 PM, spartan g wrote:
Thanks Corbin,
I have used your tips in the updated code.
Besides, my aim is to save the filename selected through the panel
to a pList file timely whenever it is changed, so I am using
synchronization of defaults. I checked and found that there is no
resetStandardUserDefaults used anywhere in the entire project.
I tried implementing dictionary insted of defaults and updating the
pList contents accordingly.
But to my surprise, in either cases(dictionary/defaults), whenever I
click browse and click cancel/open the junk values are appended
automatically in the pList file!!! For the time being I am deleting
and recreating the file, but it doesn't seem a good alternative!!!
How can a 'Panel runModal' add such junk in the pList!!!
Michael already clarified a bit, but it sounds like your definition of
junk isn't what I had expected. I assumed you were reading in bad
(unexpected) values, ie: junk. But I think you are referring to the
other values the save panel places there. As michael said, this is
just the way it works. Consider using NSDictionary and writeToFile:...
instead
corbin
Sparta...
On Fri, Sep 26, 2008 at 10:48 PM, Corbin Dunn <email@hidden>
wrote:
Howdy spartan,
Oh! A few little tips:
On Sep 26, 2008, at 3:11 AM, spartan g wrote:
Hi,
I am writing an utility which needs to open a panel to browse files
and
select one.
- (IBAction)browseClicked:(id)sender
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
if ([panel runModal]) {
NSArray *filenames = [panel filenames];
NSString *filename = [filenames objectAtIndex:0];
Always check the array length first, or just use [panel filename];
if (filename){
printf("\n browseClicked: filename = %s \n", [filename cString]);
Just a side note: most cocoa people move to NSLog, but printf still
works. Try:
NSLog(@"%@", filename); -- much easier!
if ([appToOpenText stringValue] != NULL ){
nil is preferred to NULL.
[appToOpenText setStringValue: filename];
}
else printf("\n browseClicked: appToOpenText has NULL value \n");
}
else printf ("\n *** browseClicked: Filename is NULL *** \n");
}
}
The filename chosen is assigned to the textfield. I have used
defaults to
synchronize this filename and storing it in a pList file.
[_defaults setObject: [appToOpenText stringValue] forKey:
@"AppToOpen" ];
It seems strange to use the user defaults as your model to store
objects, but i'm sure there is a reason you do this.
[_defaults synchronize];
You probably don't want to hold onto the userdefaults instance as an
ivar, and instead always query it with [NSUserDefaults
standardUserDefaults]. It may be possible that something is calling
resetStandardUserDefaults, and blowing away the old instance.
corbin
_______________________________________________
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