【问题标题】:ios - update UI inside blockios - 更新块内的 UI
【发布时间】:2017-09-15 10:52:11
【问题描述】:

我调用了 youtube API 来获取视频的标题。然后我想在表格的屏幕上显示视频的标题。块执行完成后如何访问title

这是获取标题的代码

-(void)getVideoTitle:(NSString *)urlStr success:(void (^)(NSDictionary *responseDict))success{

urlStr = [NSString stringWithFormat:@"https://www.googleapis.com/youtube/v3/videos?part=contentDetails%%2C+snippet%%2C+statistics&id=%@&key={API_KEY}",urlStr];

NSURL *url = [[NSURL alloc] initWithString:urlStr];
// Create your request
NSURLRequest *request = [NSURLRequest requestWithURL:url];

// Send the request asynchronously
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *connectionError) {

    // Callback, parse the data and check for errors
    if (data && !connectionError) {
        NSError *jsonError;
        NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];

        if (!jsonError) {
            success(jsonResult);
           // NSLog(@"Response from YouTube: %@", jsonResult);
        }
    }
}] resume];

}

我是这样调用上述函数的:

    [self getVideoTitle:@"zB4I68XVPzQ" success:^(NSDictionary *responseDict){
    NSArray *itemsArray = [responseDict valueForKey:@"items"];
    NSDictionary *item = itemsArray[0];
    NSDictionary* snippet = [item valueForKey:@"snippet"];
    NSString *title = [snippet valueForKey:@"title"];
}];

如何在块执行完毕后访问块外的title 变量?

我尝试了以下没有运气

    dispatch_async(dispatch_get_main_queue(), ^{
    [self updateMyUserInterfaceOrSomething];
});

【问题讨论】:

    标签: ios objective-c api asynchronous uilabel


    【解决方案1】:

    在您的代码中:

        NSString* recievedTitle __block = nil; //title is here, after block below run
    
        [self getVideoTitle:@"zB4I68XVPzQ" success:^(NSDictionary *responseDict){
            NSArray *itemsArray = [responseDict valueForKey:@"items"];
            NSDictionary *item = itemsArray[0];
            NSDictionary* snippet = [item valueForKey:@"snippet"];
            recievedTitle = [snippet valueForKey:@"title"]; //here you write it
            // or
            NSString *title = [snippet valueForKey:@"title"];
            [self updateInterfaceWithTitle: title]
        }];
    
    ///
    
    - (void)updateInterfaceWithTitle:(NSString*)title{
       //use title here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多