1

私は iOS ネイティブ開発に関してはちょっと新しいです。API 呼び出しから情報を読み込んでいますが、読み込み中に「読み込みスピナー」を表示したいと考えています。

すべてが機能しますが、ログに次の警告が表示されます。

これは私のコードです:

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(160, 150);
spinner.hidesWhenStopped = YES;
[self.view addSubview:spinner];
[spinner startAnimating];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL);



dispatch_async(downloadQueue, ^{
    NSString *url = [NSString stringWithFormat:@"https://www.***********?q=%@",[self.searchBar.text urlEncode:NSUTF8StringEncoding]];
    NSURL *googleURL = [NSURL URLWithString:url];
    NSData *jsonData = [NSData dataWithContentsOfURL:googleURL];

    NSError *error = nil;
    NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
    for (NSDictionary *items in [dataDict objectForKey:@"items"]) {
        Book *book = [Book bookWithTitle:[[items objectForKey:@"volumeInfo"] objectForKey:@"title"]];
        book.authors = [[[items objectForKey:@"volumeInfo"] objectForKey:@"authors"] objectAtIndex:(0)];

        [self.rowsInSection addObject:book];

    }



    dispatch_async(dispatch_get_main_queue(), ^{
        [spinner stopAnimating];
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        [[self myTableView]reloadData];
        [self.view endEditing:YES];
    });

}); 

2 つのスレッドを切り替えようとしましたが、うまくいきませんでした。何か案が?

ありがとう!A.

編集:

警告を解決しました。基本的に、他のスレッド内の「self.searchBar.text」にアクセスしていたために発生していました。これを解決するために、ローカル変数を使用して保存し、その変数をスレッドで使用しました。まだ少し混乱していますが、少なくともエラーや警告はありません。

コメント/回答とヘルプをありがとう!

A.

4

1 に答える 1