0

單擊發布到共享對話框後,如果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]; 
     } 
    }]; 
} 
} 

回答

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]; 
+0

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

0

很可能是問題的根源是,

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

創建不變對象(NSArray而不是NSMutableArray)。您可以使用

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

代替。

相關問題