我正在开发一个 iOS 应用程序,我想在其中使用 UIActivityItemProvider 将多个附件添加到电子邮件中。我想使用 UIActivityItemProvider 来做到这一点,因为我不想在向用户显示 UIActivtyViewController 之前产生处理记录的开销。如果我使用 NSData 或 NSURL 对象将一个图像传递给返回对象的“url”元素,则内联图像显示正常。如果我传入这些对象的数组,那么什么都不会出现。我相信,如果我在初始化 NSActivityViewController 时使用 ActivityItems 参数,传递一个数组会起作用,但同样,我不想这样做,因为我想利用通过使用 UIActivityItemProvider 提供的延迟处理。下面是我的代码
@implementation NoteRecordActivityProvider
- (id)initWithPlaceholderItem:(id)placeholderItem
{
//Initializes and returns a provider object with the specified placeholder data
return [super initWithPlaceholderItem:placeholderItem];
}
- (id)item
{
// //Generates and returns the actual data object
NSData *imageFile = [[NSData alloc]init];
NSString *imageFileName;
NSURL *url;
NSString* exportPath;
NSMutableArray* imageArray = [[NSMutableArray alloc]initWithCapacity:0];
NSInteger photoCount = self.noteRecord.photoCount;
for (NSInteger i = 0; i < photoCount; i+=1)
{
//Add File Attachment
PhotoObject *po = (PhotoObject*)[self.noteRecord photoObjects:i];
NSString *photoGUID = [(PhotoObject*)[self.noteRecord photoObjects:i]GUID];
imageFile = ImageDataReturningMethodHere;
imageFileName = [[NSArray arrayWithObjects:@"Image", [NSString stringWithFormat:@"%ld", (long)i], @".png", nil] componentsJoinedByString:@""];
exportPath = [[FileSystemProvider exportPath] stringByAppendingPathComponent:imageFileName];
[imageFile writeToFile:exportPath atomically:YES];
url = [NSURL fileURLWithPath:exportPath];
[imageArray addObject:url];
}
if ([self.activityType isEqualToString:UIActivityTypeMail])
return imageArray;
else
return nil;
}
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
return @{@"body":@"", @"url":[[NSURL alloc]init]};
}
-(NSString *) activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
return [NSString stringWithFormat:@"Attached Record: %@", self.noteRecord.title];
}
@end