我的照片扩展程序应用可以访问相机和照片.
一切正常,但按完成后,无法保存图像.
一切正常,但按完成后,无法保存图像.
标准完成处理程序代码:
- - (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是,
output.renderedContentURL是/private/var/mobile/Containers/Data/PluginKitPlugin/509C1A04-D414-4DB7-B1E6-83C47FC88BC9/tmp/blah_blah_name.JPG
解决方法
从iOS 10开始,调整数据必须至少有一个字节.这是iOS 9的重大变化,其中调整数据可以为零.我已经在iOS 9和iOS 10上对此进行了测试以确认.
附加文件: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];