- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我有照片上传功能,我希望我的主队列等到照片上传完成。这是我的代码:
dispatch_group_t groupe = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("com.freesale.chlebta.photoUplaod", 0);
dispatch_group_async(groupe, queue, ^{
//Upload photo in same array with annonce
//++++++++++++++++++++++++++++++++++++++
if(!_annonce)
[KVNProgress updateStatus:@"جاري رفع الصور"];
__block NSInteger numberPhotoToUpload = _photoArray.count - 1;
for (int i = 1; i < _photoArray.count; i++) {
//check if image is asset then upload it else just decrement the photo numver because it's already uploaded
if ( [[_photoArray objectAtIndex:i] isKindOfClass:[ALAsset class]]){
ALAsset *asset = [_photoArray objectAtIndex:i];
NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]], 0.6);
PFFile *imageFile = [PFFile fileWithName:@"image.png" data:imageData];
[imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded)
[annonce addUniqueObject:imageFile forKey:@"photo"];
else
NSLog(@"Error image upload \n image :%i \n error: %@",i, error);
numberPhotoToUpload --;
}];
} else
numberPhotoToUpload --;
}
});
//Wait until Photo Upload Finished
dispatch_group_wait(groupe, DISPATCH_TIME_FOREVER);
// Some other Operation
但这不起作用,我的程序继续执行而不等待照片上传完成。
最佳答案
因为您在 block 中使用 saveInBackgroundWithBlock:
方法,对吗?
https://parse.com/docs/osx/api/Classes/PFFile.html#//api/name/saveInBackgroundWithBlock :
Saves the file asynchronously and executes the given block.
如果你确实想等待后台处理的 block ,则需要调用该方法的dispatch_group_enter
和dispatch_group_leave
,如下所示。
dispatch_group_enter(groupe);
[imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
dispatch_group_leave(groupe);
...
}];
顺便说一下,
I want my main queue wait until photo upload is done
这不是一个好主意。不要阻塞主线程(主队列)。
App Programming Guide for iOS - Performance Tips - Move Work off the Main Thread
Be sure to limit the type of work you do on the main thread of your app. The main thread is where your app handles touch events and other user input. To ensure that your app is always responsive to the user, you should never use the main thread to perform long-running or potentially unbounded tasks, such as tasks that access the network.
关于objective-c - GCD 等待队列中的所有任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31290132/
环境: Ubuntu 16.04 64 位 g++ 5.4.0 版 这是代码: #include ... auto g = std::gcd(10, 4); ... 我在编译命令中开启了-std=c
我正在尝试用 Python 编写欧几里得算法。它是找到两个非常大的数字的 GCD。公式是 a = bq + r 其中 a 和 b 是你的两个数,q 是 b 均分 a 的次数,r 是余数。 我可以编写代
我正在尝试创建一个处理非常大数字的 gcd 函数。因此,到目前为止我尝试过的任何事情都会导致错误。例如 : fun gcd(a : Int.toLarge, b : Int.toLarge): Int
我是 Haskell 的新手,实际上我才刚开始,我想对我将要问的问题有一点提示。 我目前正在尝试获取给定列表的 GCD。例如,列表 [3, 6, 9] 将返回 3。 目前,我想到了以下方法,我是否朝着
我有一段来自 API 黑暗时代的现有代码。它是一个基于 MPCreateTask 的线程。看起来我可以将其移至 GCG 队列,但有点复杂。当前有三个基于 MPCreateQueue 的队列用于三个优先
出于多种原因,我想让我的应用程序向后兼容 OS X 10.5。 到目前为止,我正在使用 10.6 中添加的大量 GCD 调度队列,如下所示: dispatch_async(dispatch_get_m
我有一个在一些设备上崩溃的 iOS 应用程序。鉴于发生这种情况时我在 iTunes 上看到的差评,崩溃似乎发生在代码中的同一点。 最后,一位好心人实际上联系了我,而不仅仅是留下评论,他们甚至为我安装了
我有一个定期运行的任务,它最初设计为使用 NSThread 和 NSTimer 在与主运行循环不同的单独运行循环上运行。 适应这一点以利用 GCD 的最佳方法是什么? 当前代码: -(void)ini
我想知道这两者之间的性能差异是什么。 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
我研究过 GCD 和线程安全。在苹果文档中,GCD 是线程安全的,即多线程可以访问。而且我了解了线程安全的含义,即每当多个线程访问某个对象时总是给出相同的结果。 我认为 Thread-Safe 和 G
我需要帮助来获取两个输入数字的 GCD。我不知道为什么它不会返回 GCD。例如,55 和 125 的 GCD 将为 5。任何帮助将不胜感激。它必须使用方法,而不是算法。 public static v
几天前我在编程挑战中遇到了这个问题。 在后端的 20 个测试用例中,我只得到了一个通过。这是我的解决方案 import java.util.Scanner; class TestClass {
我研究过 GCD 和线程安全。在苹果文档中,GCD 是线程安全的,即多线程可以访问。而且我了解了线程安全的含义,即每当多个线程访问某个对象时总是给出相同的结果。 我认为 Thread-Safe 和 G
我有一种方法可以帮助我将本地standardUserDefaults与Web服务同步。首先,我需要确保数据已成功同步,然后才能让该方法返回。我目前正在努力解决的问题是,我无法让GCD按特定顺序执行并完
我必须确保 3 个数字之间的 GCD 不大于 1。 这是我迄今为止该方法的代码: private int greatestCommonFactor(int a, int b, int c) {
我有两种在串行队列上运行的方法。每个方法都返回某个类的副本。我试图在保持数据完整性的同时实现线程安全解决方案。 例如: -(Users *) getAllUsers { __block
假设我们有一个 UIVewcontroller,叫它 A,在那个 VC 的 viewdidload 中我们添加两个 UIViewcontrollers(B,C)。现在为了使 A 的 Viewdidlo
我有几个任务被分派(dispatch)到串行队列,特别是一些被分派(dispatch)到组的任务。在调度这些任务后,我想给用户取消它们的选项,即使它们已经被执行。 我找不到任何方法来取消排队的任务,然
因此,我使用 dispatch_async 将 10 个任务放入并发队列中。它们不会阻塞下一个任务,并按顺序处理。我的 UI 具有响应能力。 for (int i = 0; i < 10; i++)
public static int divisor(int m, int n) { if (m == 0 || n == 0) { return m+n; } else
我是一名优秀的程序员,十分优秀!