NSError** issue back propagate in multi function call NSError** issue back propagate in multi function call objective-c objective-c

NSError** issue back propagate in multi function call


Try this:

NSError *error = nil;EMSPlanFolder *planner = [[EMSPlanFolder sharedPlanBuilder] buildPlanFromParsePlan:plan withError:&error];if (error) {   //error}- (EMSPlanFolder*)buildPlanFromParsePlan:(EMParsedPlan*)parsedPlan withError:(NSError **)err{ .... .... [self deserializePlan:parsedPlan forPlan:newPlanFolder allowingNoEndDate:NO withError:&err];  if(err == nil) {   [newPlanFolder.managedObjectContext performBlockAndWait:^{ [EMSPlanFolder deletePlan:newPlanFolder];    }];  return nil;  } return newPlanFolder;}- (void)deserializePlan:(NSArray*)planElements forPlan:(LMSPlanFolder*)planFolder allowingNoEndDate:(BOOL)allowNoEndDate withError:(NSError **)err {     ....     ....     if(err) {      *err = [NSError errorWithDomain:@"Application" code:-1 userInfo:@{ NSLocalizedDescriptionKey:[NSString stringWithFormat:@"Plan was not found."]}];     }     return;}


Apple frameworks often execute blocks in nested autorelease pools. Your error reference is autoreleasing, and thus the error is released when the block has finished executing. To avoid this use a strong local __block variable to keep the error. Try something like that:

__block NSError *theError = nil;[context performBlockAndWait:^{     //    [self deserializePlan:parsedPlan                   forPlan:newPlanFolder         allowingNoEndDate:NO                 withError:&theError]; // <- store the error ARP safe}];*err = theError;