Paste number 66412: Code

Index of paste annotations: 1

Paste number 66412: Code
Pasted by: MMiller
When:9 months, 3 weeks ago
Share:Tweet this! | http://paste.lisp.org/+1F8S
Channel:#iphonedev
Paste contents:
Raw Source | XML | Display As
//
//  MainView.m
//  HakStore
//
//  Created by Matthew Miller on 9/3/08.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import "MainView.h"
#import "AppDelegate.h"

@implementation MainView

@synthesize myTableView, leafViewController, mySearchBar, listContent, filteredListContent, savedContent;

#pragma mark Start Up

- (void)awakeFromNib {

	listContent = [[NSMutableArray alloc] init];
	
	filteredListContent = [[NSMutableArray alloc] initWithCapacity: [listContent count]];
	[filteredListContent addObjectsFromArray: listContent];
	
	savedContent = [[NSMutableArray alloc] initWithCapacity: [listContent count]]; 
	
	
	mySearchBar.autocorrectionType = UITextAutocorrectionTypeNo;
	mySearchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;
	mySearchBar.showsCancelButton = NO;
	
	leafViewController.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
	NSTimer *timer;
	timer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(delayedAwakeFromNib:) userInfo: nil repeats: NO];
}


- (void) delayedAwakeFromNib: (NSTimer *) timer
{
	NSLog(@"delayed worked");
	[myTableView reloadData];
}



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
	// Return YES for supported orientations
	return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
	[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
	// Release anything that's not essential, such as cached data
}


- (void)dealloc {	
	
	[listContent release];
	[filteredListContent release];
	[savedContent release];
	[currentElement release];
	[currentTitle release];
	[currentDate release];
	[currentSummary release];
	[currentLink release];
	[item release];
	[leafViewController release];
	[mySearchBar release];
	[myTableView release];
	[rssParser release];
	[theSelectedRow release];

	[super dealloc];
}

#pragma mark TableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	static NSString *MyIdentifier = @"MyIdentifier";
	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
	
	if (cell == nil) {
		cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
	}
	
	// Set up the cell
	int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
	[cell setText:[[listContent objectAtIndex: storyIndex] objectForKey: @"title"]];
	
	return cell;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
	return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
	return [listContent count];
}

- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath
{
	return UITableViewCellAccessoryDisclosureIndicator;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

	// in case the searchbar's keyboard is up, dismiss it on table selection
	if ([mySearchBar isFirstResponder])
		[mySearchBar resignFirstResponder];

	// Navigation logic
	
	int appIndex = [indexPath indexAtPosition: [indexPath length] - 1];
	
	NSString * appLink = [[listContent objectAtIndex: appIndex] objectForKey: @"link"];

	
	// clean up the link - get rid of spaces, returns, and tabs...
	appLink = [appLink stringByReplacingOccurrencesOfString:@" " withString:@""];
	appLink = [appLink stringByReplacingOccurrencesOfString:@"\n" withString:@""];
	appLink = [appLink stringByReplacingOccurrencesOfString:@"	" withString:@""];
	
	NSLog(@"link: %@", appLink);
	// open in Safari
	[self startDownloadingURL:[NSURL URLWithString:appLink]];
	
}

#pragma mark RSS Feed

- (void)viewDidAppear:(BOOL)animated {
	[super viewDidAppear:animated];
	NSIndexPath *tableSelection = [myTableView indexPathForSelectedRow];
	[myTableView deselectRowAtIndexPath:tableSelection animated:YES];
	if ([listContent count] == 0) {
		NSString * path = @"http://miniflash.freehostia.com/rss/index.rss";
		[self parseXMLFileAtURL:path];
		
		
	}
	
	cellSize = CGSizeMake([myTableView bounds].size.width, 60);
	
}

- (void)parseXMLFileAtURL:(NSString *)URL {
	
	//you must then convert the path to a proper NSURL or it won't work
	NSURL *xmlURL = [NSURL URLWithString:URL];
	
	// here, for some reason you have to use NSClassFromString when trying to alloc NSXMLParser, otherwise you will get an object not found error
	// this may be necessary only for the toolchain
	rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
	
	// Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks.
	[rssParser setDelegate:self];
	
	// Depending on the XML document you're parsing, you may want to enable these features of NSXMLParser.
	[rssParser setShouldProcessNamespaces:NO];
	[rssParser setShouldReportNamespacePrefixes:NO];
	[rssParser setShouldResolveExternalEntities:NO];
	
	[rssParser parse];
	
}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
	NSString * errorString = [NSString stringWithFormat:@"Unable to download applications from web site (Error code %i )", [parseError code]];
	NSLog(@"error parsing XML: %@", errorString);
	
	UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
	[errorAlert show];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
	//NSLog(@"found this element: %@", elementName);
	currentElement = [elementName copy];
	
	if ([elementName isEqualToString:@"item"]) {
		// clear out our story item caches...
		item = [[NSMutableDictionary alloc] init];
		currentTitle = [[NSMutableString alloc] init];
		currentDate = [[NSMutableString alloc] init];
		currentSummary = [[NSMutableString alloc] init];
		currentLink = [[NSMutableString alloc] init];
	}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
	
	//NSLog(@"ended element: %@", elementName);
	if ([elementName isEqualToString:@"item"]) {
		// save values to an item, then store that item into the array...
		[item setObject:currentTitle forKey:@"title"];
		[item setObject:currentLink forKey:@"link"];
		[item setObject:currentSummary forKey:@"summary"];
		[item setObject:currentDate forKey:@"date"];
		
		[listContent addObject:[item copy]];
		NSLog(@"adding app: %@", currentTitle);
	}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
	//NSLog(@"found characters: %@", string);
	// save the characters for the current item...
	if ([currentElement isEqualToString:@"title"]) {
		[currentTitle appendString:string];
	} else if ([currentElement isEqualToString:@"link"]) {
		[currentLink appendString:string];
	} else if ([currentElement isEqualToString:@"description"]) {
		[currentSummary appendString:string];
	} else if ([currentElement isEqualToString:@"pubDate"]) {
		[currentDate appendString:string];
	}
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
	
	[activityIndicator stopAnimating];
	[activityIndicator removeFromSuperview];
	
	NSLog(@"all done!");
	NSLog(@"listContent array has %d items", [listContent count]);
	[myTableView reloadData];
}

#pragma mark Search Bar

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
	// if a valid search was entered but the user wanted to cancel, bring back the saved list content
	if (searchBar.text.length > 0)
	{

	}

	
	[searchBar resignFirstResponder];
	searchBar.text = @"";
}

// called when Search (in our case "Done") button pressed
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
	[searchBar resignFirstResponder];
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
	mySearchBar.showsCancelButton = NO;
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
	// only show the status bar's cancel button while in edit mode
	mySearchBar.showsCancelButton = YES;

}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
	

}

#pragma mark Download App


- (void)startDownloadingURL:(NSURL *)aURL
{
//PROBLEMS HERE
    // create the request
	NSIndexPath *tableSelection = [myTableView indexPathForSelectedRow];
	NSString* link = [listContent valueForKey:@"currentLink"];
	NSURL * appLink = [listContent objectAtIndex:tableSelection] valueForKey:@"currentLink"];

    NSURLRequest *theRequest=[NSURLRequest requestWithURL:appLink cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
//TO HERE...
//I cant seem to get the URL that is in a key format from the "item" which is each row. (Item holds the info to the name of the row, the link/url and other information.)

    // create the connection with the request
    // and start loading the data
	NSString *destinationFilename;
    NSString *homeDirectory=NSHomeDirectory();
	destinationFilename=[homeDirectory stringByAppendingPathComponent:@""];
	
	NSURLDownload  *theDownload=[[NSURLDownload alloc] initWithRequest:theRequest delegate:self];
   
	if (theDownload) {
        // set the destination file now
        [theDownload setDestination:destinationFilename allowOverwrite:YES];
    } else {
        // inform the user that the download could not be made
    }
}


- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error
{
    // release the connection
    [download release];
	
    // inform the user
    NSLog(@"Download failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
}

- (void)downloadDidFinish:(NSURLDownload *)download
{
    // release the connection
    [download release];
	
    // do something with the data
    NSLog(@"%@",@"downloadDidFinish");
}


@end

Annotations for this paste:

Annotation number 1: Code
Pasted by: MMiller
When:9 months, 3 weeks ago
Share:Tweet this! | http://paste.lisp.org/+1F8S#1
Paste contents:
Raw Source | Display As
- (void)startDownloadingURL:(NSURL *)aURL
{
    // create the request
	NSInteger *tableSelection;

	NSURL *appURL = [[[listContent objectAtIndex:tableSelection.row] valueForKey:@"currentLink"] absoluteURL];
    NSURLRequest *theRequest=[NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    // create the connection with the request
    // and start loading the data
	NSString *destinationFilename;
    NSString *homeDirectory=NSHomeDirectory();
	destinationFilename=[homeDirectory stringByAppendingPathComponent:@""];
	
	NSURLDownload  *theDownload=[[NSURLDownload alloc] initWithRequest:theRequest delegate:self];
   
	if (theDownload) {
        // set the destination file now
        [theDownload setDestination:destinationFilename allowOverwrite:YES];
    } else {
        // inform the user that the download could not be made
    }
}

Colorize as:
Show Line Numbers
Index of paste annotations: 1

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.