Мое изолированное приложение для Mac помещает данные изображений в виде данных "public.jpeg", а также kPasteboardTypeFilePromiseContent на монтажный стол.
Путь, используемый для обещанного файла, находится где-то в папке «Контейнер» моего изолированного приложения.
Это прекрасно работает для перетаскивания в Finder, но, похоже, вызывает проблемы с другими изолированными приложениями, которые отдают приоритет обещанным данным файла над данными изображения, например, приложению Apple Pages.
Я не могунайдите документацию, где написать обещанный файл, чтобы другие приложения в песочнице могли получить к нему доступ.Любые подсказки приветствуются.
NSURL *url = [NSURL fileURLWithPath:self.libraryImage.filePath];
if (url)
{
[pasteboardItem setDataProvider:dataProvider
forTypes:@[(NSString *)kPasteboardTypeFilePromiseContent]];
}
Обновление:
Я получил кое-что работающее, используя расширение NSPasteBoard, опубликованное здесь: https://stackoverflow.com/a/18561956/581784
Единственное, чего не хватает - это получитьфайл, записанный в определенном месте на рабочем столе пользователя, где завершение отбрасывания.Мой текущий код выглядит так:
- (void)pasteboard:(nullable NSPasteboard *)pasteboard item:(NSPasteboardItem *)item provideDataForType:(NSString* /* NSPasteboardType */)type
{
if ([type isEqualToString:(NSString *)kPasteboardTypeFileURLPromise])
{
NSURL *pasteURL = [pasteboard pasteLocation];
if (pasteURL) {
NSString *listingImageUUID = [item stringForType:kGSListingImageUUIDPasteboardType];
GSListingImage *listingImage = (GSListingImage*) [[[GSAppDelegate appDelegate] mainDatabaseContext] objectWithUUID:listingImageUUID ofClass:GSListingImage.class];
NSString *imageName = [listingImage.libraryImage.filePath lastPathComponent];
NSURL *destURL = [pasteURL URLByAppendingPathComponent:imageName];
[[listingImage.libraryImage jpegData] writeToURL:destURL
atomically:YES];
[pasteboard setPasteLocation:destURL];
}
}
}