Objective c 块完成后未设置属性值

Objective c 块完成后未设置属性值,objective-c,objective-c-blocks,Objective C,Objective C Blocks,我试图在下面的代码中设置属性值,但是当我退出块时,该属性值为null - (PRSapoAuth *)initWithUser:(NSString *)user password:(NSString *)password forToken:{ __block NSString *token; self = [super init]; if (!self) { return nil; } NSString *urlAuth = [NSString stringWithFormat:@

我试图在下面的代码中设置属性值,但是当我退出块时,该属性值为null

- (PRSapoAuth *)initWithUser:(NSString *)user password:(NSString *)password forToken:{

__block NSString *token;

self = [super init];
if (!self) {
    return nil;
}

NSString *urlAuth = [NSString stringWithFormat:@"https://services.sapo.pt/Codebits/gettoken?user=%@&password=%@", user, password];
NSString *modifiedURL = [urlAuth stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:modifiedURL]];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    token = JSON[@"token"];
    self.token = token;
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    token = @"";
    self.token = token;
}];
[operation addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:nil];
[operation start];
while (!operation.isFinished) {
}

return self;

}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSLog(@"%@", self.token);
}

我做错了什么吗?

你做了什么调试/记录了吗?只需代码底部的NSLog行。因此,找出JSON中的确切内容,以及响应是否有效……JSON有数据且有效。JSONI是一个字典,顶级键为token,并且被正确提取,然后用正确的值调用setter?定位问题,是数据处理还是您的观察?
you need to call method in this order.Not sure but will work for you 


   [operation start];
    [operation addObserver:self forKeyPath:@"isFinished" options:NSKeyValueObservingOptionNew context:nil];