2014-09-30 49 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