Отправка пользовательских типов файлов через AirDrop

Я создаю приложение Objective-C, которое использует функцию AirDrop, включенную в iOS. Файл, который я пытаюсь отправить, представляет собой файл .plist, который по какой-то причине технически считается настраиваемым типом файла. При получении файла .plist с моего Mac все идет отлично, но когда я пытаюсь отправить, AirDrop немедленно дает сбой, и я смог отобразить ошибку в отладчике.

В нем говорится:

AirDrop: Invalid URL (no scheme) /var/mobile/Containers/Data/Application/AB771F7E-AFDB-4CB4-8D60-E1B62BAB8A62/Documents/Chicken.plist

И позже:

Sender kSFOperationEventErrorOccured { Error = "Error Domain=SFOperation Code=-4 \"The transfer failed because there were no valid files to send.\" 

Наконец, NSLocalizedDescription ошибки говорит:

UserInfo={NSLocalizedDescription=The transfer failed because there were no valid files to send.}

Я не уверен, почему он не находит файл, поскольку я использую аналогичный код во всем приложении для извлечения файлов из этого каталога, и все работает нормально. Вот код метода IBAction, который вызывается, когда пользователь нажимает кнопку «Поделиться»:

recipeName = [[NSUserDefaults standardUserDefaults]
                        stringForKey:@"recipeName"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *appFolderPath = [paths objectAtIndex:0];
NSString *plistName = [recipeName stringByAppendingString:@".plist"]; //add ".plist" to the end of the recipe name
NSString *fileName = [appFolderPath stringByAppendingPathComponent:plistName]; //find plist


NSURL *url = [NSURL URLWithString:fileName];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:nil];

// Exclude all activities except AirDrop.
NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
                                UIActivityTypePostToWeibo,
                                UIActivityTypeMessage, UIActivityTypeMail,
                                UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
                                UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
                                UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
                                UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
controller.excludedActivityTypes = excludedActivities;

// Present the controller
[self presentViewController:controller animated:YES completion:nil];

заранее спасибо


person JustMe    schedule 20.01.2016    source источник


Ответы (1)


Вам нужен файлURL. Попробуйте изменить это

NSURL *url = [NSURL URLWithString:fileName];

to

NSURL *url = [NSURL fileURLWithPath:fileName];
person ccjensen    schedule 20.01.2016