iOS照片扩展finishContentEditingWithCompletionHandler:无法保存更改 [英] iOS photo extension finishContentEditingWithCompletionHandler: Unable to Save Changes

查看:285
本文介绍了iOS照片扩展finishContentEditingWithCompletionHandler:无法保存更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的照片扩展应用可以访问相机和照片。
一切正常,但是当按完成时,它无法保存图像。

My photo extension app has access to both Camera and Photos. All is ok, but when pressing Done, it can not save image.

标准完成处理程序代码:

Code of standard completion handler:

- (void)finishContentEditingWithCompletionHandler:(void (^)(PHContentEditingOutput *))completionHandler {
    // Update UI to reflect that editing has finished and output is being rendered.

    // Render and provide output on a background queue.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        PHContentEditingOutput *output = [[PHContentEditingOutput alloc] initWithContentEditingInput:self.input];

        NSError* error = nil;

        NSData *renderedJPEGData = UIImageJPEGRepresentation(filtered_ui_image, 1.0);
        assert(renderedJPEGData != nil);
        //BOOL written_well = [renderedJPEGData writeToURL:output.renderedContentURL atomically:YES];

        BOOL written_well = [renderedJPEGData writeToURL:output.renderedContentURL options:NSDataWritingAtomic error:&error];
        assert(written_well);



        // Call completion handler to commit edit to Photos.
        completionHandler(output);
    });
}

renderedJPEGData 不是 nil

错误 nil ,因此函数 [NSData writeToURL] 成功,

written_well YES

renderedJPEGData is not nil,
error is nil, thus function [NSData writeToURL] was successful,
written_well is YES,

逐行调试时,在块完成后,会出现一个警告:

when debugging line-by-line, after block finishes, an alert appears:

output.renderedContentURL / private / var / mobile / Containers / Data / PluginKitPlugin / 509C1A04-D414-4DB7-B1E6-83C47FC88BC9 / tmp / blah_blah_name.JPG

所以,我有权限,调试显示没有错误,我可以尝试检测问题的原因?

推荐答案

As在iOS 10中,调整数据必须至少有一个字节。这是iOS 9的重大变化,其中调整数据可以为零。我已经在iOS 9和iOS 10上对此进行了测试以确认。

As of iOS 10, the adjustment data must have at least one byte. This is a breaking change from iOS 9, where the adjustment data can be nil. I've tested this on both iOS 9 and iOS 10 to confirm.

其他文档: https://developer.apple.com/reference/photos/phcontenteditingoutput/1518684-adjustmentdata

PHContentEditingOutput* output = [[PHContentEditingOutput alloc] initWithContentEditingInput:self.input];
NSMutableData* adjustmentData = [NSMutableData data];
uint8_t byte = 1;
[adjustmentData appendBytes:&byte length:1];
output.adjustmentData = [[PHAdjustmentData alloc] initWithFormatIdentifier:@"com.yourcompany.yourapp" formatVersion:@"1.0f" data:adjustmentData];

这篇关于iOS照片扩展finishContentEditingWithCompletionHandler:无法保存更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆