gpt4 book ai didi

ios - 从共享扩展上传多张图片

转载 作者:可可西里 更新时间:2023-11-01 05:40:48 26 4
gpt4 key购买 nike

我目前设置了一个共享扩展程序,可以将从照片应用程序中选择的图像上传到服务器。使用下面的代码可以正常工作。

 int fileNum=10;

NSItemProvider *attachment = inputItem.attachments[0];
if ([attachment hasItemConformingToTypeIdentifier:(NSString*)kUTTypeImage])
{
[attachment loadItemForTypeIdentifier:(NSString*)kUTTypeImage options:nil completionHandler:^(id item,NSError *error)
{
if (item)
{
NSLog (@"image %@",item);
//upload image here
NSData *data=[NSData dataWithContentsOfURL:item];
activityRecord.activityType=@"Images";
AppRecord *appRecord=[[AppRecord alloc] init];
appRecord.fileName=[NSString stringWithFormat:@"activity_%@%i(%i).jpg",activityRecord.supplierID,activityRecord.activityID,fileNum];
appRecord.fileBytes=data;
[fileRecords addObject:appRecord];
activityRecord.activityFiles=fileRecords;
[[Settings getInstance] uploadActivityRecord:activityRecord withDelegate:self];
[self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
}
}];
}

我之前有一个问题,未调用 loadItemForTypeIdentifier 方法,通过在完成 block 中调用 completeRequestReturningItems 解决了这个问题。我现在遇到的问题是,如果我想上传多个文件,那么我需要在 for 循环(针对每个图像)中调用 loadItemForTypeIdentifier 但是如果 completeRequestReturningItems 方法将在第一个图像/项目之后调用?

非常感谢保罗

最佳答案

我最近遇到了同样的问题,并且能够通过添加一个计数器并在图像成功完成它们的 block 时倒计时来解决它。在 loadItemForTypeIdentifier 完成 block 中,我然后检查是否在调用 dispatch_once block 中的 completeRequestReturningItems 之前调用了所有项目(只是为了安全起见).

__block NSInteger imageCount;
static dispatch_once_t oncePredicate;

NSItemProvider *attachment = inputItem.attachments[0];

if ([attachment hasItemConformingToTypeIdentifier:(NSString*)kUTTypeImage])
{
[attachment loadItemForTypeIdentifier:(NSString*)kUTTypeImage options:nil completionHandler:^(NSData *item ,NSError *error)
{
if (item)
{
// do whatever you need to

imageCount --;

if(imageCount == 0){

dispatch_once(&oncePredicate, ^{

[self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];

});
}
}
}];
}

我不能说我觉得这是一个过于优雅的解决方案,所以如果有人知道处理这个常见用例的更合适的方法,我很乐意听听。

关于ios - 从共享扩展上传多张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com