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: "spartan g" <email@hidden>
- Date: Sat, 27 Sep 2008 11:04:52 +0530
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!!!
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