UIActivityViewController在iOS11中未显示AirDrop选项



我有一些代码显示了一个UIAcvityViewController,用于从我的应用程序导出自定义对象,格式为JSON。此代码在以前版本的iOS中运行良好,但现在在iOS 11中失败了。问题是,当活动视图控制器显示时,它根本不显示空投面板或可用的接收设备。该文档是一个NSDictionary,它被编码并写入NSData对象,然后写入磁盘并由NSURL引用。正如我所说,这段代码运行良好,在以前的iOS版本中仍然运行良好。我还有另一个地方,我正在使用UIActivityViewController导出图像文件,Airdrop在iOS 11中继续运行良好。我假设这个问题与我在ActivityProvider的URL键中引用的URL所导出和引用的文件的格式有关,但我已经尝试了所有有意义的输出和编码该对象的方法。这是我正在使用的代码:

NSString *textToShare = @"I am sharing this record with you!";
NSURL* url = [self.record exportNoteToURL];
NSMutableArray* activityProviders = [[NSMutableArray alloc]initWithCapacity:0];
NoteRecordActivityProvider *provider = [[NoteRecordActivityProvider alloc] initWithPlaceholderItem:@{@"body":textToShare, @"url":url}];
[activityProviders addObject:provider];
//Initialize the ActivityViewController
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityProviders applicationActivities:applicationActivities];
NSArray *excludeActivities = @[UIActivityTypePostToFacebook,
UIActivityTypePostToTwitter,
UIActivityTypePostToWeibo,
//UIActivityTypeMessage,
//UIActivityTypeMail,
//UIActivityTypePrint,
UIActivityTypeCopyToPasteboard,
UIActivityTypeAssignToContact,
UIActivityTypeSaveToCameraRoll,
UIActivityTypeAddToReadingList,
UIActivityTypePostToFlickr,
UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo,
//UIActivityTypeAirDrop,
UIActivityTypeOpenInIBooks];
activityController.excludedActivityTypes = excludeActivities;
[activityController setValue:[NSString stringWithFormat:@"Record:  %@", self.record.title] forKey:@"subject"];
activityController.popoverPresentationController.barButtonItem = (UIBarButtonItem*)sender;
activityController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
if (completed)
{
NSLog(@"The Activity: %@ was completed", activityType);
}
else
{
NSLog(@"The Activity: %@ was NOT completed", activityType);
}
[FileSystemProvider clearExportsDirectory];
};
[self presentViewController:activityController animated:YES completion:nil];

以下是将字典导出到URL的代码,该代码似乎工作正常。

#pragma mark Document Export
-(NSURL*) exportNoteToURL
{
NSMutableDictionary* dict =[[NSMutableDictionary alloc]initWithCapacity:0];
// 1 Create Dictionary
NSDictionary* noteDict = [self getSettingsDictionary];
[dict setValue:noteDict forKey:@"Note"];
// 2 Get File Name and create file path
NSString* fullFilePath = [[FileSystemProvider documentPath]stringByAppendingPathComponent:@"Exports"];
NSLog(@"Export Path:  %@", fullFilePath);
[MiscUtilities createDirectory:fullFilePath];
NSString* fileName = @"ExportedNoteRecord.lgz";
fileName = self.title;
fileName = [fileName stringByReplacingOccurrencesOfString:@" " withString:@""];
fileName = [MiscUtilities SanitizeFileNameString:fileName];
fileName = [NSString stringWithFormat:@"%@%@", fileName, @".lgz"];
fullFilePath = [fullFilePath stringByAppendingPathComponent:fileName];
// 3 Write dictionary to FileSystem
NSURL* url = [[NSURL alloc]initFileURLWithPath:fullFilePath];
BOOL res = [dict writeToURL:url error:&error];
if (res)
{
return url;
}
else
{
return nil;
}
}

问题是activityViewControllerPlaceholderItem返回一个Dictionary。您在此处返回的类型用于指示您正在出售的对象类型。Airdrop不想收到一本神秘的词典,所以它没有回应。如果自动售货是一个文件URL,那么您应该返回一个URL。

最新更新