0

I want to get the version from the url, so I write like this:

- (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;
}

But the return is first executed, then the success is triggered.

How can I get the updated value?

melody5417
  • 355
  • 2
  • 13

1 Answers1

2

In the success case, call something that processes the returned version. Or make the call to the poorly named GET:parameters:progress:success:failure: method synchronous.

I.e. In the success block, do:

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

And make -versionOnLine return (void).

bbum
  • 162,346
  • 23
  • 271
  • 359