plist - iPhone: Problem with scope of variables -


i have used code load data plist.

-(void)loadorcreatedata {     nslog(@"start loadorcreatedata");     nsstring *filepath = [self datafilepath];     if ([[nsfilemanager defaultmanager] fileexistsatpath:filepath])      {         nslog(@"file exists.. loading plist file");         nsarray *array = [[nsarray alloc] initwithcontentsoffile:filepath];         font = [array objectatindex:0];         background = (nsstring *)[array objectatindex:1];         animation = [array objectatindex:5];         [array release];         nslog(@"loading done!");     }     else      {         nslog(@"file not exist.. creating new plist file");         font = @"georgia-bolditalic";         background = @"monalisa.jpeg";         animation = @"103";         [self savedata];     }      nslog(@"finish loadorcreatedata"); }  - (nsstring *)datafilepath {    nsarray *paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);    nsstring *documentsdirectory = [paths objectatindex:0];    return [documentsdirectory stringbyappendingpathcomponent:@"data.plist"]; }  - (void)savedata {    nsmutablearray *array = [[nsmutablearray alloc] init];    [array addobject:font];    [array addobject:background];    [array addobject:animation];    [array writetofile:[self datafilepath] atomically:yes];    [array release]; } 

the first time loads fine when there no plist file data from. on second load, app crashes when try use loaded data outside loadorcreate method. reason, data in font, background , animation not available when accessed outside loadorcreate method. variables - font, background , animation declared nsstrings in .h file , therefore should globally available right? can please tell me reason is?

you have retain objects.

    font = [[array objectatindex:0] retain];     background = (nsstring *)[[array objectatindex:1] retain];     animation = [[array objectatindex:5] retain]; ...     font = [@"georgia-bolditalic" retain];     background = [@"monalisa.jpeg" retain];     animation = [@"103" retain]; 

note: if you're loading data several times, don't forget release values before set them.

edit:

-(void)loadorcreatedata {     [font release];     [background release];     [animation release];      nslog(@"start loadorcreatedata");     nsstring *filepath = [self datafilepath];     if ([[nsfilemanager defaultmanager] fileexistsatpath:filepath])      {         nslog(@"file exists.. loading plist file");         nsarray *array = [[nsarray alloc] initwithcontentsoffile:filepath];         font = [[array objectatindex:0] retain];         background = (nsstring *)[[array objectatindex:1] retain];         animation = [[array objectatindex:5] retain];         [array release];         nslog(@"loading done!");     }     else      {         nslog(@"file not exist.. creating new plist file");         font = [@"georgia-bolditalic" retain];         background = [@"monalisa.jpeg" retain];         animation = [@"103" retain];         [self savedata];     }      nslog(@"finish loadorcreatedata"); } 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -