Я делаю расширение для фотографий, но когда пытаюсь сохранить изменения (нажата кнопка «Готово»).
Предупреждающее сообщение «Невозможно сохранить изменения» — «Произошла ошибка при сохранении. Пожалуйста, попробуйте позже.'
Это мой код для finishContentEditingWithCompletionHandler:completionHandler
- (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(QOS_CLASS_DEFAULT, 0), ^{
// Create editing output from the editing input.
PHContentEditingOutput *output = [[PHContentEditingOutput alloc] initWithContentEditingInput:self.input];
NSURL *originalImageURL = self.input.fullSizeImageURL;
//Apply filter
CIFilter *appliedFilter = [CIFilter filterWithLUT:self.presetFilterNameArray[self.currentAppliedFilterIndex] originalLUT:@"LUT-ORG-512" dimension:64 alpha:self.filterAlphaSlider.value CIContext:self.ciContext];
UIImage *filteredOriginalImage = [self filterApply:[UIImage imageWithContentsOfFile:originalImageURL.path] filter:appliedFilter];
//Apply orientation
filteredOriginalImage = [UIImage imageWithCGImage:filteredOriginalImage.CGImage scale:filteredOriginalImage.scale orientation:self.input.fullSizeImageOrientation];
// Provide new adjustments and render output to given location.
NSData *archiver = [NSKeyedArchiver archivedDataWithRootObject:self.presetFilterNameArray[self.currentAppliedFilterIndex]];
output.adjustmentData = [[PHAdjustmentData alloc] initWithFormatIdentifier:@"com.fantagram.BetterAndBetter.TKPhotoExtension" formatVersion:@"1.0" data:archiver];
NSData *renderedJPEGData = UIImageJPEGRepresentation(filteredOriginalImage, 1.0f);
if([renderedJPEGData writeToURL:output.renderedContentURL atomically:YES]){
NSLog(@"success to write");
}
else{
NSLog(@"fail to write");
}
NSLog(@"%@", output);
// Call completion handler to commit edit to Photos.
completionHandler(output);
// Clean up temporary files, etc.
});
}
Предыдущий ответ на эту проблему, кто-то сказал, что при рендеринге в NSData размер изображения должен отличаться от исходного изображения. Итак, я попробовал это, но не сработал.
Еще кое-что.
Можно ли открыть хост-приложение из расширения фото?
self.extensionContext openURL: не работает (насколько я знаю, это работает только в сегодняшнем расширении.)
UIResponder *responder = self;
while(responder){
if([responder respondsToSelector:@selector(openURL:)]){
dispatch_async(dispatch_get_main_queue(), ^{
[responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:(MY_URL_Schemes)]];
});
}
responder = [responder nextResponder];
}
приведенный выше код также не работал. Это сработало, когда я использовал его share extension
.
Спасибо.
UIApplication
выходит за рамки (это имеет смысл: ваше расширение — это просто общая структура, используемая другим приложением, которому принадлежитsharedInstance
изUIApplication
). Таким образом, я не думаю, что вы можете запустить приложение-контейнер из расширения. - person Nicolas Miari   schedule 16.09.2018finishContentEditing:
такая же, как код Apple. Я зарегистрировал все свойства данныхPHContentEditingInput
, переданных в начале сеанса редактирования, и вскоре заметил, что сохранение всегда терпит неудачу именно тогда, когдаfullSizeImageOrientation
имеет значение 6 (также известное какCGImagePropertyOrientation.right
), которое каким-то образом применимо ко всем фотографиям, которые я делаю в портретной ориентации. Как только я найду обходной путь или решение, я опубликую. отвечать. - person Nicolas Miari   schedule 17.09.2018