Путь к файлу (изображению) в папке расширения службы уведомлений

#ios #objective-c #attachment #unnotificationserviceextension #unnotificationattachment

#iOS #цель-c #привязанность #unnotificationserviceextension #отключение привязки #objective-c #вложение

Вопрос:

Я пытаюсь добавить локальное изображение (значок) в качестве вложения к удаленному уведомлению в iOS 12. Другими словами, URL-адрес изображения не передается в уведомлении userInfo, а определяется внутренне на основе других критериев в userInfo. Поэтому я хочу, чтобы к приложению прилагалась библиотека значков на выбор. Я не могу определить, каким был бы относительный URL-адрес, если бы я хотел добавить изображение такого рода в уведомление. Это то, что я пытаюсь сделать, и файл «example.png» находится в папке «Расширение службы уведомлений».

Я хочу знать, как скопировать папку с изображениями из xcode на устройство, на которое я создаю.

Затем я хочу знать, каким будет относительный путь для доступа к этим изображениям, которые будут использоваться для вложений.

 UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.title = @"Title";
content.body = @"Body";
content.sound = [UNNotificationSound defaultSound];
NSURL *imageURL = [NSURL fileURLWithPath:@"example.png"];
NSError *error;
UNNotificationAttachment *icon = [UNNotificationAttachment attachmentWithIdentifier:@"image" URL:imageURL options:nil error:amp;error];
if (error)
{
    NSLog(@"error while storing image attachment in notification: %@", error);
}
if (icon)
{
    content.attachments = @[icon];
}
  

Ответ №1:

Просто скопируйте каталог изображений в свой проект Xcode. Xcode свяжет его и скопирует на устройство. На устройстве выполните следующие действия (взятые непосредственно из документации)

 NSBundle *main = [NSBundle mainBundle];
NSString *resourcePath = [main pathForResource:@"Seagull" ofType:@"jpg"];
  

Это из документов, но есть и URLForResource:withExtention то, что лучше использовать.

Комментарии:

1. Я использовал URLForResource:withExtention , и это сработало. Я подозреваю, что pathForResource:ofType метод не обеспечивал надлежащего экранирования для создания URL-адреса.

2. Отличный материал… да, это лучшая альтернатива..