UIImage kann in der schnellen iOS 8-Erweiterung nicht umgewandelt werden

Ich habe ein seltsames Problem. Ich versuche, eine Aktionserweiterung zu erstellen, mit der der Barcode aus dem bereitgestellten Bild gescannt wird. Hier ist der Code.

override func viewDidLoad() {
    super.viewDidLoad()

    // Get the item[s] we're handling from the extension context.

    // For example, look for an image and place it into an image view.
    // Replace this with something appropriate for the type[s] your extension supports.
    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 {
                        dispatch_async(dispatch_get_main_queue(),{
                            if let imageView = weakImageView {
                                var imageToSet: UIImage? = image as? UIImage
                                imageView.image = image as? UIImage
                            }

                            self.imageToScan = self.imageView.image
                            self.scanFromImage(self.imageToScan!)
                        })
                    }
                })

                imageFound = true
                break
            }
        }

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

Nun, wenn ich versuche, UIImage zu bekommen, bekomme ich immer null, während ich auf dem Bild sehen kann, dass ein Bild empfangen wird. Aber wenn ich versuche, UIImage von diesem Bild zu erhalten, gibt es immer null zurück. Hier ist der Screenshot vom Debuggen, der helfen könnte

Update: Hier ist die Beschreibung des Bildes, das empfangen wird als:

Druckbeschreibung des Bildes: (NSSecureCoding!) Image = (instance_type = Builtin.RawPointer = 0x15d674c0 -> 0x32b6be5c (void *) 0x32b6be70: NSURL)

Ich habe die gleiche Erweiterung mit Ziel C erstellt und es funktioniert, aber nicht in kürzester Zeit. Hier ist der objektive C-Code:

- (void)viewDidLoad {
[super viewDidLoad];

// Get the item[s] we're handling from the extension context.

// For example, look for an image and place it into an image view.
// Replace this with something appropriate for the type[s] your extension supports.
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) {
                     dispatch_async(dispatch_get_main_queue(), ^{
                        [imageView setImage:image];
                        imageToScan = image;
                        [self scanImage:imageToScan];
                    });
                }
            }];

            imageFound = YES;
            break;
        }
    }

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

}

Ich versuche viel auf Google zu suchen, habe aber nichts gefunden. Ich habe sogar einen geänderten Code ausprobiert, aber das funktioniert nicht. Hier ist der geänderte Code:

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

                            self.imageToScan = self.imageView.image
                            self.scanFromImage(self.imageToScan)
                        }
                    }
                })

Update: Ich habe eine Sache bemerkt; Wenn ich ein neues Projekt erstelle und ihm eine Aktionserweiterung hinzufüge, wird derselbe Code automatisch generiert, mit Ausnahme einiger Zeilen, die ich im Block hinzugefügt habe. Auch ohne eine einzige Zeile automatisch generierten Codes zu ändern, ist das imageView.image gleich Null. Ist das ein Fehler in Swift? Oder ein Fehler mit meiner Xcode-App.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage