Я пытаюсь реорганизовать некоторый код NSJSONSerialization
, чтобы он не находился в основном потоке. На данный момент приложение немного тормозит.
Я хотел бы преобразовать этот код в то, что у меня есть ниже, и у меня проблемы с синтаксисом, особенно с обработкой ошибок. Например, если я возьму свой существующий код (метод requestData:) и помещу его в
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
таблица больше не загружает никаких данных.
спасибо за любую помощь.
-(void)requestData {
[HUD showUIBlockingIndicatorWithText:@"Fetching JSON"];
NSError *requestError = nil;
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
URLWithString:kURL]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&requestError];
NSError *jsonParsingError = nil;
if (requestError)
{
NSLog(@"sync. request failed with error: %@", requestError);
}
else
{
// handle data
publicData = [NSJSONSerialization JSONObjectWithData:response
options:0
error:&jsonParsingError];
publicDataArray = [publicData objectForKey:@"data"];
}
/*
for(publicDataDict in publicDataArray) {
NSLog(@"data output is %@",[publicDataDict objectForKey:@"title"]);
}
*/
[self.mainTableView reloadData];
[HUD hideUIBlockingIndicator];
}
Вот код, который я хотел бы использовать.
-(void)viewDidAppear:(BOOL)animated
{
[HUD showUIBlockingIndicatorWithText:@"Fetching Data"];
//1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//code executed in the background
//2
NSData* ghData = [NSData dataWithContentsOfURL:
[NSURL URLWithString:kURL]
];
//3
NSDictionary* json = nil;
if (ghData) {
json = [NSJSONSerialization
JSONObjectWithData:ghData
options:kNilOptions
error:nil];
}
//4
dispatch_async(dispatch_get_main_queue(), ^{
//code executed on the main queue
//5
[self.tableView reloadData];
[HUD hideUIBlockingIndicator];
});
});
}
self.mainTableView
, а во втором —self.tableView
. - person colincameron   schedule 03.07.2013