iphone - Multiple sharedInstance called failed -
in application have called sharedinstance multiple time in multiple method deffinition , here code,
method 1
-(void) showactionsheet:(id)sender forevent:(uievent*)event { if(isquantity==yes) { [[webservice sharedinstance] getquantity:^(bool result) { if(result) { nslog(@"success"); nsmanagedobjectcontext *context = [[dataaccesslayer sharedinstance] managedobjectcontext]; quantity = [context fetchobjectsforentityname:nsstringfromclass([getquantity class]) withsortcolumn:nil withsortdescending:true withpredicate:nil]; nslog(@"array ->%@",quantity); isquantity=no; } }]; } popovercontroller1 = [[tspopovercontroller alloc]initwithcontentviewcontroller:tableviewcontroller1]; popovercontroller1.cornerradius = 5; popovercontroller1.titletext = @"quantity"; popovercontroller1.popoverbasecolor = [uicolor blackcolor]; popovercontroller1.popovergradient= no; [popovercontroller1 showpopoverwithtouch:event]; } method 2
-(void) showactionsheetw:(id)sender forevent:(uievent*)events { if(issize==yes) { [[webservice sharedinstance] getdimension:^(bool result) { if(result){ nslog(@"success"); nsmanagedobjectcontext *context = [[dataaccesslayer sharedinstance] managedobjectcontext]; dime = [context fetchobjectsforentityname:nsstringfromclass([getdimension class]) withsortcolumn:nil withsortdescending:false withpredicate:nil]; nslog(@"array ->%@",dime); } }]; } popovercontroller2 = [[tspopovercontroller alloc] initwithcontentviewcontroller:tableviewcontroller2]; popovercontroller2.cornerradius = 5; popovercontroller2.titletext = @"size"; popovercontroller2.popoverbasecolor = [uicolor blackcolor]; popovercontroller2.popovergradient= no; // popovercontroller.arrowposition = tspopoverarrowpositionhorizontal; [popovercontroller2 showpopoverwithtouch:events]; } edit
- (void) getdimension:(void (^)(bool))handler { jbcontainedurlconnection *connection = [[jbcontainedurlconnection alloc]init ]; [connection initwithgeturl:ip methodname:getdimension param:nil andcompletionhandler:^(jbcontainedurlconnection *connection, nserror *error, nsstring *urlstring, nsdictionary *userinfo, nsdata *response) { if(error) { nslog(@"error: %@", error); handler(false); } else { if(response == nil) handler(false); else { nsmanagedobjectcontext *context = [[dataaccesslayer sharedinstance] managedobjectcontext]; nsarray *existingresults = [context fetchobjectsforentityname:nsstringfromclass([getdimension class]) withsortcolumn:nil withsortdescending:false withpredicate:nil]; (nsmanagedobject *obj in existingresults) [context deleteobject:obj]; [[dataaccesslayer sharedinstance] savecontext]; id responsedata = [self dictionaryfromresponse:response]; if(responsedata == nil) handler(false); else { nslog(@"dimension response: %@", [[nsstring alloc] initwithdata:response encoding:nsutf8stringencoding]); nsarray *data=[responsedata objectforkey:@"getdimensionresult"]; nslog(@"getdimensionresult :%@",data); for( nsdictionary *dict in data){ getdimension *userdetails = [getdimension newobject]; [userdetails fillfromdictionary:dict]; } [[dataaccesslayer sharedinstance] savecontext]; handler(true); } } } }]; } - (void) getquantity:(void (^)(bool))handler { jbcontainedurlconnection *connection = [[jbcontainedurlconnection alloc]init ]; [connection initwithgeturl:ip methodname:getquantity param:nil andcompletionhandler:^(jbcontainedurlconnection *connection, nserror *error, nsstring *urlstring, nsdictionary *userinfo, nsdata *response) { if(error) { nslog(@"error: %@", error); handler(false); } else { if(response == nil) handler(false); else { nsmanagedobjectcontext *context = [[dataaccesslayer sharedinstance] managedobjectcontext]; nsarray *existingresults = [context fetchobjectsforentityname:nsstringfromclass([getquantity class]) withsortcolumn:nil withsortdescending:false withpredicate:nil]; (nsmanagedobject *obj in existingresults) [context deleteobject:obj]; [[dataaccesslayer sharedinstance] savecontext]; id responsedata = [self dictionaryfromresponse:response]; if(responsedata == nil) handler(false); else { nslog(@"getquantityresult response: %@", [[nsstring alloc] initwithdata:response encoding:nsutf8stringencoding]); nsarray *data=[responsedata objectforkey:@"getquantityresult"]; // nslog(@"getdimensionresult :%@",data); for( nsdictionary *dict in data){ getquantity *userdetails = [getquantity newobject]; [userdetails fillfromdictionary:dict]; } [[dataaccesslayer sharedinstance] savecontext]; handler(true); } } } }]; } instance method
+ (id)sharedinstance { @synchronized(self) { if (manager == nil) manager = [[self alloc] init]; } return manager; } -(id)init { if(self = [super init]) { } return self; } -(nsstring *)nsstringfromdictionaryusingjson:(id)dictionary { sbjsonwriter *writer = [[sbjsonwriter alloc]init]; return [writer stringwithobject:dictionary]; } -(id)dictionaryfromresponse:(nsdata *)response { nsstring *responsebody = [[nsstring alloc] initwithdata:response encoding:nsasciistringencoding]; sbjsonparser *parser = [[sbjsonparser alloc]init]; return [parser objectwithstring:responsebody error:nil]; } sharedinstance works 1 time,ie,. if call of method first worked,if calls other method second time app gets crashed.can 1 please me sort out
i guess sharedinstance method messy.
it should
+ (id)sharedinstance { if (manager == nil) manager = [[self alloc] init]; return manager; } enjoy programming !
Comments
Post a Comment