2014-09-30 28 views
0

我試圖獲得在向項目添加行動擴展時自動創建的行動擴展模板。默認情況下,它假設接受圖像並顯示它。但是當試圖在Photo中使用它時,圖片是一個jpeg和imageView.image = image? UIImage不設置圖像。 imageView.image是零。蘋果IOS8行動擴展模板不適用於照片

var imageFound = false 
for item: AnyObject in self.extensionContext!.inputItems { 
    let inputItem = item as NSExtensionItem 
    for provider: AnyObject in inputItem.attachments! { 
     let itemProvider = provider as NSItemProvider 
     if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as NSString) { 
      // This is an image. We'll load it, then place it in our image view. 
      weak var weakImageView = self.imageView 
      itemProvider.loadItemForTypeIdentifier(kUTTypeImage as NSString, options: nil, completionHandler: { (image, error) in 
       if image != nil { 
        NSOperationQueue.mainQueue().addOperationWithBlock { 
         if let imageView = weakImageView { 
          imageView.image = image as? UIImage 
         } 
        } 
       } 
      }) 

      imageFound = true 
      break 
     } 
    } 

    if (imageFound) { 
     // We only handle one image, so stop looking for more. 
     break 
    } 
} 

但客觀等價的C工作得很好

BOOL imageFound = NO; 
for (NSExtensionItem *item in self.extensionContext.inputItems) { 
    for (NSItemProvider *itemProvider in item.attachments) { 
     if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) { 
      // This is an image. We'll load it, then place it in our image view. 
      __weak UIImageView *imageView = self.imageView; 
      [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error) { 
       if(image) { 
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
         [imageView setImage:image]; 
        }]; 
       } 
      }]; 

      imageFound = YES; 
      break; 
     } 
    } 

    if (imageFound) { 
     // We only handle one image, so stop looking for more. 
     break; 
    } 
} 

有沒有人能夠得到模板的工作?

您可以通過「文件/新建/目標」 &從斯威夫特項目選擇應用程序擴展/擴展行動」在Xcode 6.0.1

+1

可能重複的[無法在swift iOS 8擴展中投射UIImage](http://stackoverflow.com/questions/25887242/unable-to-cast-uiimage-in-swift-ios-8-extension) – 2015-01-20 21:48:30

回答

0

得到這個代碼,我有一種解決方法,現在可能是有用的其他人發現同樣的問題:

我已經創建了一個調用從客觀C「loadItemForTypeIdentifier」,並返回圖像我打電話從斯威夫特這個功能,只是正常一個目標C實用工具類

@protocol UtilitiesDelegate 
- (void) setImage:(UIImage*) image; 
@end 

@implementation Utilities 
+ (void) loadItemForImage:(NSItemProvider *)itemProvider delegate:(id<UtilitiesDelegate>)utilDelegate 
{ 
    [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error) { 
     if(image) 
     { 
      [utilDelegate setImage:image]; 
     } 

    }]; 

} 

,並且可以調用的

Utilities.loadItemForImage(itemProvider, delegate: self) 

代替

itemProvider.loadItemForTypeIdentifier(kUTTypeImage as NSString, options: nil, completionHandler: { (image, error) in 
     if image != nil { 
      NSOperationQueue.mainQueue().addOperationWithBlock { 
       if let imageView = weakImageView { 
        imageView.image = image as? UIImage 
       } 
      } 
     } 

我知道這是不是一個適當的修正,但它的作品。

+0

Did你有沒有發現這個Swift修復?我有同樣的問題。 – Nick 2014-12-28 05:27:56