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
Post a Comment