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

时间:2017-02-27 10:40:04

标签: ios objective-c nsmutablearray appcelerator-titanium ios8-share-extension

点击发布到共享对话框后,如果arrSites变量当前不为空,则Host App(例如Safari)将挂起。我只能在arrSites变量中存储1个对象。如何将addObject添加到我的NSMutableArray变量?

下面是我实现的代码,它在[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];
         }
     }];
}
}

2 个答案:

答案 0 :(得分:0)

如果没有内存分配,您无法将对象添加到数组中,请使用

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

答案 1 :(得分:0)

问题的根源很可能是

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

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

解决此问题
arrSites = [[sharedUserDefaults objectForKey:@"SharedExtension"] mutableCopy];

代替。