Revision: 22643
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 18, 2010 05:12 by christophercjensen
Initial Code
- (void)setSearchingModeEnabled:(BOOL)isSearching
{
//when network action, toggle network indicator and activity indicator
if (isSearching) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
HUD = [[MBProgressHUD alloc] initWithWindow:window];
[window addSubview:HUD];
HUD.labelText = @"Connecting";
[HUD show:YES];
} else {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[HUD hide:YES];
[HUD removeFromSuperview];
[HUD release];
}
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
NSString *searchType = [ConstantsConverter searchTypeTagToKey:self.selectedSearchType];
NSString *searchString = [searchBar.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *searchURLString = [[NSString alloc] initWithFormat:@"%@?type=%@&search=%@",
self.baseURL, searchType, searchString];
NSLog(@"connecting to: %@", searchURLString);
//retrieve the json data
self.responseData = [[NSMutableData data] retain];
NSURL *searchURL = [[NSURL alloc] initWithString:searchURLString];
NSURLRequest *request = [NSURLRequest requestWithURL:searchURL];
[self setSearchingModeEnabled:YES];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
[searchURLString release];
[searchURL release];
}
#pragma mark -
#pragma mark NSURLConnection Delegate Methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[self.responseData setLength:0];
self.searchResultFileSize = [NSNumber numberWithLongLong:[response expectedContentLength]];
if ([self.searchResultFileSize intValue] != NSURLResponseUnknownLength) {
HUD.mode = MBProgressHUDModeDeterminate;
HUD.labelText = @"Getting Results";
}
NSLog(@"content-length: %@ bytes", self.searchResultFileSize);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.responseData appendData:data];
NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.responseData length]];
NSLog(@"resourceData length: %d", [resourceLength intValue]);
NSLog(@"filesize: %d", self.searchResultFileSize);
NSLog(@"float filesize: %f", [self.searchResultFileSize floatValue]);
HUD.progress = [resourceLength floatValue] / [self.searchResultFileSize floatValue];
NSLog(@"progress: %f", [resourceLength floatValue] / [self.searchResultFileSize floatValue]);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[self setSearchingModeEnabled:NO];
NSString *detailMessage = [[NSString alloc]
initWithFormat:@"Connection failed: %@",
[error description]];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" message:detailMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
[detailMessage release];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[self setSearchingModeEnabled:NO];
[connection release];
NSString *jsonResponse = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
[self.responseData release];
NSString *searchType = [ConstantsConverter searchTypeTagToKey:self.selectedSearchType];
//parse the result and remove outermost wrapper
SBJSON *parser = [[SBJSON alloc] init];
NSArray *tempResults = [[parser objectWithString:jsonResponse error:nil] objectForKey:searchType];
NSMutableDictionary *searchResultsKeepers = [[NSMutableDictionary alloc] init];
//evaluate the results, and keep only unique ones
for (NSDictionary *entry in tempResults) {
if (![[searchResultsKeepers allKeys] containsObject:[entry objectForKey:@"label"]]) {
//insert the search type
NSMutableDictionary *modifiedEntry = [[NSMutableDictionary alloc] initWithDictionary:entry];
[modifiedEntry setObject:searchType forKey:@"type"];
[searchResultsKeepers setObject:modifiedEntry forKey:[modifiedEntry objectForKey:@"label"]];
[modifiedEntry release];
}
}
self.searchResults = searchResultsKeepers;
[searchResultsKeepers release];
[parser release];
[jsonResponse release];
[resultsView reloadData];
}
Initial URL
Initial Description
Initial Title
MBProgressHUD with an asynchronous NSURLConnection call
Initial Tags
c
Initial Language
Objective C