1

私のアプリケーションでは、複数のメソッド定義で sharedinstance を複数回呼び出しました。ここで私のコードは、

方法 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];
}

方法 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];
}

編集

 - (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];
             for (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];
             for (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);
             }
         }  }
 }];
 }

インスタンスメソッド

 + (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 は 1 回だけ機能します。最初にメソッドのいずれかを呼び出すと、他のメソッドを2回目に呼び出すとアプリがクラッシュします.誰かがそれを整理するのを手伝ってくれます

4

2 に答える 2