0

Я пользуюсь аудиозаписью через UIActivityViewController. Когда аудиофайл делится по электронной почте или iMessage, он показывает базовое имя аудиофайла без видимого способа его изменения.UIActivityViewController с альтернативным именем файла?

NSArray *activityItems = [NSArray arrayWithObjects:self.audioPlayer.url, nil]; 

UIActivityViewController *avc = [[UIActivityViewController alloc] 
           initWithActivityItems:activityItems 
           applicationActivities:nil]; 
[self presentViewController:avc 
        animated:YES completion:nil]; 

Если я не использую UIActivityViewController и просто использовать MFMessageComposeViewController непосредственно, чем я могу использовать

[composer addAttachmentURL:self.audioPlayer.url withAlternateFilename:@"Piano Song.m4a"]; 

Можно ли иметь альтернативное имя файла с UIActivityViewController?

+0

Я бы использовал NSFileManager для создания копии с нужным именем перед добавлением в качестве вложения. Но, конечно, проблема будет заключаться в том, как обрабатывать копию после завершения использования контроллера – Vinh

ответ

0

Нет, невозможно. Не могли бы вы просто переименовать файл, прежде чем делиться им?

1

Вы можете создать жесткую ссылку на файл (так что вам не нужно копировать фактический файл) с любым именем, которое вы хотите во временном каталоге, и передать его в UIActivityViewController вместо файла.

- (NSURL *)createLinkToFileAtURL:(NSURL *)fileURL withName:(NSString *)fileName { 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    // create a path in the temp directory with the fileName 
    NSURL *tempDirectoryURL = [[NSFileManager defaultManager] temporaryDirectory]; 
    NSURL *linkURL = [tempDirectoryURL URLByAppendingPathComponent:fileName]; 

    // if the link already exists, delete it 
    if ([fileManager fileExistsAtPath:linkURL.path]) { 
     NSError *error; 
     [fileManager removeItemAtURL:linkURL error:&error]; 
     if (error) { 
      // handle the error 
     } 
    } 

    // create a link to the file 
    NSError *error; 
    BOOL flag = [fileManager linkItemAtURL:fileURL toURL:linkURL error:&error]; 
    if (!flag || error) { 
     // handle the error 
    } 
    return linkURL; 
} 

Используйте это так:

NSURL *fileURL = ...; 
NSString *desiredName = ...; 

NSURL *linkURL = [self createLinkToFileAtURL:fileURL withName:desiredName]; 
UIActivityViewController *viewController = [[UIActivityViewController alloc] initWithActivityItems:@[linkURL] applicationActivities:nil]; 
[self presentViewController:viewController animated:YES completion:nil]; 

Надеется, что это помогает! Удачи!

Смежные вопросы