I’m sure this has been asked before, but I’ve had no luck finding it. In my app data is loading synchronously, which locks up the app. I’ve tried asynch loading, but that doesn’t work with the JSON parser.
To denote that the app isn’t frozen, just working on downloading data, I was hoping to present the user with a small transparent overlay with the loading icon. I was wondering how to go about this – do I need to put it on another thread?
To clarify, I want to do something very similar to the Netflix iPad app – their loading overlay is perfect for the projet I’m working on.
Edit: I’ve added some async code below
I first call this function:
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSURLConnection *c = [[NSURLConnection alloc] init];
[self connectionWorks:c didReceiveData:data];
connectionworks
-(void)connectionWorks:(NSURLConnection *)connection didReceiveData:(NSData *)data{
OLWork *newWork;
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *results = [jsonString JSONValue];
NSArray *rawBooks = [results objectForKey:@"works"];
for (NSDictionary *work in rawBooks) {
newWork = [[OLWork alloc] init];
newWork.title = [work objectForKey:@"title"];
newWork.author = [[[work objectForKey:@"authors"] objectAtIndex:0] objectForKey:@"name"];
newWork.key = [work objectForKey:@"key"];
[self.works setValue:newWork forKey:newWork.title];
}
}
This will do the job for you, it’s well documented and easy to use
https://github.com/jdg/MBProgressHUD
Out of intrest which JSON parser are you using? Getting asynchronous requests working would be a much better solution.