ios - 自返回首次执行以来,如何返回从 block 中获取的对象?

标签 ios objective-c macos block

<分区>

我想从url中获取版本,所以我这样写:

- (NSInteger)versionOnLine {
__block NSInteger ver = 0;
NSString *urlStr = [ServerURL stringByAppendingString:@"version.json"];
[[TXYManager sharedInstance] GET:urlStr
                    parameters:nil
                      progress:^(float progess) {
                        NSLog(@"progess is %f",progess);
                      } success:^(id responseObject) {
                         NSLog(@"download version file successfully");
                         if (!responseObject) {
                           return ;
                         }
                         ver = [[responseObject objectForKey:@"version"] integerValue];
                         NSLog(@"version : %ld",(long)ver);

                       } failure:^(NSError *error) {
                         NSLog(@"%@",error);
                       }];
  return ver;
}

但是return是先执行,然后触发成功。

如何获取更新后的值?

最佳答案

在成功的情况下,调用一些处理返回版本的东西。或者同步调用命名不当的 GET:parameters:progress:success:failure: 方法。

即在成功 block 中,执行:

 dispatch_async(... get main queue ..., ^{
     [self dealWithVersions:ver];
 });

并使 -versionOnLine 返回 (void)

关于ios - 自返回首次执行以来,如何返回从 block 中获取的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169219/

上一篇:ios - 每次启动更新位置时不显示警报

下一篇:ios - 设置文本属性(颜色、字体、字体大小)在 iOS 中不起作用

相关文章:

iphone - 表格 View 中的图像显示在模拟器中,但未显示在我的 iPod 设备中

ios - 在某些情况下禁用重用单元格

ios - 弹回上一个 ViewController 无法在警报错误消息上工作

objective-c - 在 Swift 子类中更改 Objective C 方法的实现

macos - OSX 的 Mach-O 二进制编辑器?

ruby - 为什么重新安装 Ruby 1.8.7 失败

ios - iOS11中的核心数据索引

objective-c - 了解 dispatch_async

ios - MPMoviePlayerViewController无法播放电影,无法立即启动和关闭

macos - brew doctor - 如何修复这些警告以及它们的含义