IOS共享扩展NSMutableArray addObject发送到实例的无法识别的选择器

IOS共享扩展NSMutableArray addObject发送到实例的无法识别的选择器

问题描述:

单击发布到共享对话框后,如果arrSites变量当前不为空,则主机应用程序(例如Safari)会挂起。我只能在arrSites变量中存储1个对象。我怎样才能addObject到我的NSMutableArray变量?IOS共享扩展NSMutableArray addObject发送到实例的无法识别的选择器

下面是我实现的代码,它在[arrSites addObject:dictSite]行中产生错误。

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

没有内存分配,你不能将对象添加到阵列,使用像

// 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

谢谢@安布。像一个迷人的魅力工作! – ramonthegreat

很可能是问题的根源是,

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

创建不变对象(NSArray而不是NSMutableArray)。您可以使用

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

代替。