i have following code calling using statement: sqlitedb *db = [[[sqlitedb alloc] init] autorelease];
the problem "sharedsqlitedb" not being called, rather "allocwithzone" is, , therefore "checkifdatabaseexists" not being called, database created.
i don't understand why... (i.e. doing wrong?)
#import "sqlitedb.h" static sqlitedb *sharedsqlitedb = nil; // makes singleton class @implementation sqlitedb @synthesize searchpaths, documentpath, databasepath, cdatabasepath; #pragma mark singleton methods + (sqlitedb *) sharedsqlitedb { if(!sharedsqlitedb) { sharedsqlitedb = [[sqlitedb alloc] init]; [sharedsqlitedb checkifdatabaseexists]; // check see if d/b exists } return sharedsqlitedb; } +(id)allocwithzone:(nszone *)zone { // makes sure instance not allocated if(!sharedsqlitedb) { sharedsqlitedb = [super allocwithzone:zone]; return sharedsqlitedb; } else { return nil; } } -(id)copywithzone:(nszone *)zone { return self; } -(void) release { // no-op }
it isn't executing + (sqlitedb *) sharedsqlitedb method because you're not calling method anywhere.
as you've seen, when call [[sqlitedb alloc] init], allocwithzone method called.
change call sqlitedb *db = [sqlitedb sharedsqlitedb], call checkifdatabaseexists method in case. however, if [[sqlitedb alloc] init] called somewhere else, checkifdatabaseexists method call still skipped.
maybe consider moving checkifdatabaseexists method init method called both singleton method , allocwithzone.
Comments
Post a Comment