0

Après avoir cliqué sur Publier dans la boîte de dialogue de partage, l'application hôte (par exemple Safari) raccroche si la variable arrSites n'est actuellement pas vide. Je peux seulement stocker 1 objet dans ma variable arrSites. Comment puis-je ajouter un objet à ma variable NSMutableArray? Ci-dessous est mon code implémenté et il génère une erreur dans la ligne [arrSites addObject: dictSite].Extension de partage IOS NSMutableArray addObject Sélecteur non reconnu envoyé à l'instance

- (void)didSelectPost 
{ 
inputItem = self.extensionContext.inputItems.firstObject; 

NSItemProvider *urlItemProvider = [[inputItem.userInfo valueForKey:NSExtensionItemAttachmentsKey] objectAtIndex:0]; 

if ([urlItemProvider hasItemConformingToTypeIdentifier:(__bridge NSString *)kUTTypeURL]) 
{ 
    NSLog(@"++++++++++ Attachment is a URL"); 
    [urlItemProvider loadItemForTypeIdentifier:(__bridge NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) 
    { 
     if (error) 
     { 
      NSLog(@"Error occured"); 
     } 
     else 
     { 
      NSMutableArray *arrSites; 
      if ([sharedUserDefaults valueForKey:@"SharedExtension"]){ 
       arrSites = [sharedUserDefaults objectForKey:@"SharedExtension"]; 
      }else{ 
       arrSites = [[NSMutableArray alloc] init]; 
      } 

      NSDictionary *dictSite = [NSDictionary dictionaryWithObjectsAndKeys:self.contentText, @"Text", url.absoluteString, @"URL",nil]; 

      [arrSites addObject:dictSite]; 
      [sharedUserDefaults setObject:arrSites forKey:@"SharedExtension"]; 
      [sharedUserDefaults synchronize]; 

      UIAlertController * alert= [UIAlertController 
              alertControllerWithTitle:@"Success" 
              message:@"V7 Posted Successfully." 
              preferredStyle:UIAlertControllerStyleAlert]; 
      UIAlertAction* ok = [UIAlertAction 
            actionWithTitle:@"OK" 
            style:UIAlertActionStyleDefault 
            handler:^(UIAlertAction * action) 
            { 
             [UIView animateWithDuration:0.20 animations:^ 
             { 
              self.view.transform = CGAffineTransformMakeTranslation(0, self.view.frame.size.height); 
             } 
                 completion:^(BOOL finished) 
             { 
              [self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; 
             }]; 
            }]; 

      [alert addAction:ok]; 
      [self presentViewController:alert animated:YES completion:nil]; 
     } 
    }]; 
} 
} 

Répondre

0

Sans allocation de mémoire, vous ne pouvez pas ajouter l'objet à un tableau, utilisez comme

// allocate the memory of array in before 
NSMutableArray *arrSites = [[NSMutableArray alloc] init]; 
if ([sharedUserDefaults valueForKey:@"SharedExtension"]){ 
    [arrSites addObjectsFromArray:[sharedUserDefaults objectForKey:@"SharedExtension"]]; 
} 
[arrSites addObject:dictSite]; 
+0

Merci @Anbu. Fonctionne comme un charme charmant !!! – ramonthegreat

0

Très probablement la source du problème est que

arrSites = [sharedUserDefaults objectForKey:@"SharedExtension"]; 

crée objet immuable (NSArray au lieu de NSMutableArray). Vous pouvez résoudre ce problème à l'aide de

arrSites = [[sharedUserDefaults objectForKey:@"SharedExtension"] mutableCopy]; 

à la place.