簡體   English   中英

調用Web服務時將performSelector用於activityIndi​​cator的問題-iOS

[英]issue with using performSelector for activityIndicator while calling web service - IOS

我正在嘗試使performSelector在進行Web服務調用時將活動指示器加載到單獨的線程上。 問題是“返回parsedData;” 未在fetchJSON:中設置。 但是,當我在getData:方法中打印parsedData時,它又恢復正常了。 我假設在performSelector完成獲取數據之前正在執行返回。 有什么方法可以讓fetchJSON:方法在返回parsedData之前等待performSelector完成嗎?

-(void)showActivityIndicator
{ 
    CGRect frame = CGRectMake(0.0, 0.0, 125.0, 125.0);
    loading = [[UIActivityIndicatorView alloc] initWithFrame:frame];
    [loading setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [loading hidesWhenStopped];
    //loading.center=[self tableView].center;
    [loading startAnimating];
    [loading sizeToFit];
    loading.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                UIViewAutoresizingFlexibleRightMargin |
                                UIViewAutoresizingFlexibleTopMargin |
                                UIViewAutoresizingFlexibleBottomMargin);

    // initing the bar button
    //UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:loading];
    //loadingView.target = self;

    [loadingView addSubview:loading];
}


- (NSDictionary *)fetchJSON:(NSString *)urlString
{
    NSMutableString *domain = [[NSMutableString alloc] initWithString:@"http://www.blablabla.com/dev/"];
    [domain appendString:urlString];
    //NSLog(@"%@", domain);
    NSURL *url = [NSURL URLWithString:domain];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    [self showActivityIndicator];
    [self performSelector:@selector(getData:) withObject:req afterDelay:0.0];
    //[self performSelectorOnMainThread:@selector(getData:) withObject:req waitUntilDone:YES];

    return parsedData;
}

-(IBAction)getData:(id)sender
{   
    NSURLResponse* response = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:sender returningResponse:&response error:nil];
    parsedData = [NSJSONSerialization
                  JSONObjectWithData:data
                  options:NSJSONReadingMutableLeaves
                  error:nil];
    NSLog(@"GET DATA %@", parsedData);
    [loading stopAnimating];
    loading = nil;
}

“將活動指示器加載到單獨線程上的performSelector”

??

通常,UIKit不是線程安全的。

在注釋掉的代碼和令人困惑的方法聲明之間(為什么要使用getData:IBAction?是從代碼內部調用還是作為控件的操作調用它?),我確實在這里缺少想要執行的操作的上下文。

您可以先概述一下您要完成的工作以及此代碼如何適應該情況嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM