我的照片扩展程序应用可以访问相机和照片.
一切正常,但按完成后,无法保存图像.
一切正常,但按完成后,无法保存图像.
标准完成处理程序代码:
- (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];