gpt4 book ai didi

ios - dispatch_async 方法实现第二个方法而不执行第一个方法

转载 作者:行者123 更新时间:2023-11-29 00:00:05 26 4
gpt4 key购买 nike

NSString *firstID = @"https://wallpaperbrowse.com/media/images/soap-bubble-1958650_960_720.jpg";

想象一下,我的第一个ID是缩略图,当我传递第一个ID时,它会获取完整图像并获取原始图像

    dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"0");
[self GetFullImage:firstID];
NSLog(@"1");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"2");
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:PAN applicationActivities:nil];
activityViewController.popoverPresentationController.sourceView = self.view;
[self presentViewController:activityViewController animated:YES completion:nil];
NSLog(@"3");
NSLog(@"PAGGGGGG:%@",PAN);

});
});

第一种方法代码:

- (void)GetFullImage:(NSString *)FullPath{
NSString *UserName = [Appdata sharedDataModel].userNameString;
NSString *Password = [Appdata sharedDataModel].passwordString;
NSString *DeviceType = [Appdata device];
NSString *VersionNo = [Appdata buildVersion];

NSMutableDictionary *parameterDict = [[NSMutableDictionary alloc] init];

[parameterDict setObject:UserName forKey:@"UserName"];
[parameterDict setObject:Password forKey:@"Password"];
[parameterDict setObject:DeviceType forKey:@"DeviceType"];
[parameterDict setObject:VersionNo forKey:@"VersionNo"];
[parameterDict setObject:FullPath forKey:@"FullPath"];

[[APIUtility sharedInstance] get_Orig_Full_Image_Disp:parameterDict finishResult:^(id response) {

if(response){
@try {
iconImage=nil;
dispatch_async(dispatch_get_main_queue(), ^{
[SHaREDATA removeAllObjects];
[SHaREDATA addObject:response];
NSLog(@"15975368420:%@",SHaREDATA);

NSString *FullImage = [[[SHaREDATA objectAtIndex:0]valueForKey:@"Path"]objectAtIndex:0];
NSLog(@"ppppppppppp:%@",FullImage);
NSData* data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:FullImage]];
iconImage = [UIImage imageWithData:data];
NSLog(@"YYYYYYYYYY:%@",iconImage);
NSString * savePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.jpg"];
[UIImageJPEGRepresentation(iconImage, 1.0) writeToFile:savePath atomically:YES];
PAN =@[iconImage];
});

}
@catch (NSException *exception) {
}
}
}];
}

结果(我得到):

2018-04-11 10:03:56.105 search[2119:29318] 0
2018-04-11 10:03:56.107 search[2119:29318] 1
2018-04-11 10:03:56.108 search[2119:29318] 2
2018-04-11 10:03:56.206 search[2119:29318] 3
2018-04-11 10:03:56.206 search[2119:29318] PAGGGGGG:(null)
2018-04-11 10:10:47.299 search[2208:32130] returnDictionary = (
{
Caption = "";
Path = "https://wallpaperbrowse.com/media/images/soap-bubble-1958650_960_720.jpg";
ReturnValue = 0;
}
)
2018-04-11 10:10:47.299 search[2208:32130] 15975368420:(
(
{
Caption = "";
Path = "https://wallpaperbrowse.com/media/images/soap-bubble-1958650_960_720.jpg";
ReturnValue = 0;
}
)
)
2018-04-11 10:10:47.300 search[2208:32130]
ppppppppppp:https://wallpaperbrowse.com/media/images/soap-bubble-1958650_960_720.jpg
2018-04-11 10:10:49.187 search[2208:32130] YYYYYYYYYY:<UIImage:0x7c815d70>, {960, 720}

我尝试了很多方法,但所有方法都像我的结果一样执行,我想先执行获取完整图像,然后执行UIActivityController请帮助我,我陷入了这么多天。

当我使用dispatch_sync时,它会阻止该方法内部的方法。

最佳答案

在我看来,在这种情况下你应该使用 block。使用 completionBlock 重新制作 GetFullImage: 方法,并在 completionBlock 中显示 UIActivityController。您可以查看下面的代码

- (void)GetFullImage:(NSString *)FullPath completion:(void(^)(UIImage* image))completion{
NSString *UserName = [Appdata sharedDataModel].userNameString;
NSString *Password = [Appdata sharedDataModel].passwordString;
NSString *DeviceType = [Appdata device];
NSString *VersionNo = [Appdata buildVersion];

NSMutableDictionary *parameterDict = [[NSMutableDictionary alloc] init];

[parameterDict setObject:UserName forKey:@"UserName"];
[parameterDict setObject:Password forKey:@"Password"];
[parameterDict setObject:DeviceType forKey:@"DeviceType"];
[parameterDict setObject:VersionNo forKey:@"VersionNo"];
[parameterDict setObject:FullPath forKey:@"FullPath"];

[[APIUtility sharedInstance] get_Orig_Full_Image_Disp:parameterDict finishResult:^(id response) {

if(response){
@try {
iconImage=nil;
dispatch_async(dispatch_get_main_queue(), ^{
[SHaREDATA removeAllObjects];
[SHaREDATA addObject:response];
NSLog(@"15975368420:%@",SHaREDATA);

NSString *FullImage = [[[SHaREDATA objectAtIndex:0]valueForKey:@"Path"]objectAtIndex:0];
NSLog(@"ppppppppppp:%@",FullImage);
NSData* data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:FullImage]];
iconImage = [UIImage imageWithData:data];
NSLog(@"YYYYYYYYYY:%@",iconImage);
NSString * savePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/whatsAppTmp.jpg"];
[UIImageJPEGRepresentation(iconImage, 1.0) writeToFile:savePath atomically:YES];
PAN =@[iconImage];

if (completion) {
completion(iconImage);
}
});

}
@catch (NSException *exception) {
if (completion) {
completion(nil);
}
}
}
}];
}

用法:

[self GetFullImage:firstID completion:^(UIImage *image) {
if (!image) {
return;
}

NSLog(@"2");
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[iconImage] applicationActivities:nil];
activityViewController.popoverPresentationController.sourceView = self.view;
[self presentViewController:activityViewController animated:YES completion:nil];
NSLog(@"3");
NSLog(@"PAGGGGGG:%@",image);
}];

关于ios - dispatch_async 方法实现第二个方法而不执行第一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766791/

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