gpt4 book ai didi

iphone - 在加载 json 或其他数据时,如何从 View 中删除 UIButton/keyboard/UIAlertView?

转载 作者:行者123 更新时间:2023-12-03 21:17:15 24 4
gpt4 key购买 nike

我在应用程序中使用 UISearchBar,问题是当我调用一些 json 方法时 searchBarSearchButtonClicked 似乎不会放弃键盘,直到其他方法完成加载数据。我尝试交替使用 UIAlertView 和 UIButtons 来替换 searchBarSearchButtonClicked 函数,但它们似乎也卡住并保持在“按下”状态。我还想知道这是否是 [UIApplication sharedApplication].networkActivityIndi​​catorVisible = YES; 不会在设备状态栏中显示事件指示器的原因。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
self.args = searchBar.text;
[self grabData];
[self fillVars];
[searchBar resignFirstResponder];
[self.tableView reloadData];
}

[self scrapData] 是我抓取 JSON 数据的地方,[self fillVars] 只是填充一些稍后使用的内容。

-(void)grabData{
self.args = [self.args stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

urlString = [NSString stringWithFormat:@"%@%@?key=%@&q=%@",baseUrl,func,apiKey,args];
url = [NSURL URLWithString:urlString];
NSData *jsonData = [NSData dataWithContentsOfURL:url];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
self.matches = [json objectForKey:@"matches"];
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;

}

最佳答案

您将必须使用线程。界面的所有操作都发生在主线程上,因此当您在主线程上执行冗长的任务时,界面将无法在任务完成之前更新自身。

在 UIViewController 中,您可以执行 [self PerformSelectorInBackground:@selector(grabData) withObject:self],这是使用中央 dispact 分派(dispatch)新队列(线程)的便捷方法。

您也可以使用 GCD API 手动执行此操作。你会做一些类似的事情:

dispatch_queue_t jsonQueue = dispatch_queue_create("JSON Queue", NULL);
dispatch_async(jsonQueue, ^{

// fetch JSON data ...

dispatch_async(dispatch_get_main_queue(), ^{

// perhaps do something back on the main queue once you're done!

});
});

关于iphone - 在加载 json 或其他数据时,如何从 View 中删除 UIButton/keyboard/UIAlertView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com