Переменные Objective C в асинхронном блоке не изменяют значение переменной Class - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь использовать мои проанализированные значения JSON из асинхронного блока в других методах и viewDidLoad, но возвращает значение внутри блока, но в других методах просто возвращает нуль

, вот мой файл Viewcontroler.mкод:

#import "ViewController.h"

 @interface ViewController ()

@end

NSString *buttonText;

@implementation ViewController

 - (void)viewDidLoad {

[super viewDidLoad];

 [self URLconnection];

  NSLog(@"this is value: %@", buttonText);

  }



  - (void)URLconnection {



NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

[request setURL:[NSURL URLWithString:@“XXXXXXXXXX"]];

NSURLSessionDataTask *task = [[self getURLSession] 
 dataTaskWithRequest:request completionHandler:^( NSData *data, 
 NSURLResponse *response, NSError *error )
                              {
            dispatch_async( dispatch_get_main_queue(),
                    ^{
                // parse returned JSON array
                NSError *jsonError;
    NSArray *parsedJSONArray = [NSJSONSerialization 
  JSONObjectWithData:data options:NSJSONReadingMutableContainers 
   error:&jsonError];


        NSLog( @"%@", [parsedJSONArray valueForKey:@"data" ] );
                        NSDictionary *dictionary = [parsedJSONArray 
      valueForKey:@"data"];

                        NSLog(@"this is dictionary %@", 
  dictionary[@"buttonText"]);

                        buttonText = dictionary[@"buttonText"];



                                    } );
                }];

[task resume];
 }

@end

в коде выше NSLOG в возвращаемом значении блока, но NSLOG в viewDidLoad возвращает ноль

1 Ответ

0 голосов
/ 28 января 2019

Поскольку код в блоке выполняется асинхронно, это означает, что когда вы пытаетесь напечатать значение в viewDidLoad(), оно не имеет значения, поэтому оно печатает Null, что правильно.Когда Block завершает свой процесс и получает данные с сервера, он будет иметь значение в вашей переменной, и он печатает правильный ответ.

Надеюсь, он очистится.

...