iOS照片扩展finishContentEditingWithCompletionHandler:无法保存更改 [英] iOS photo extension finishContentEditingWithCompletionHandler: Unable to Save Changes
问题描述
我的照片扩展应用可以访问相机和照片。
一切正常,但是当按完成时,它无法保存图像。
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屋!