Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

insorior

macrumors newbie
Original poster
Jun 15, 2010
4
0
Hi everyone! I made a RSS reader, showing last actualities of one of my websites. Unfortunately, when I Tap an article, the app closes and safari opens, to read the article. I would like to invoke safari in order to keep my app opened, and to be able to go back with a simple button.
I heard about UIWebView Class, but i'm french and I need help. So here are the files.
Could someone tell me what I Precisally have to add in the files to succeed?
Thanks alot

RootViewController.h
Code:
//
//  RootViewController.h
//  TAB RSS reader
//
//  Created by Jason Terhorst on 7/28/08.
//  Copyright AstoundingCookie, LLC 2008. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController {
	
	IBOutlet UITableView * newsTable;
	
	UIActivityIndicatorView * activityIndicator;
	
	CGSize cellSize;
	
	NSXMLParser * rssParser;
	
	NSMutableArray * stories;
	
	
	// a temporary item; added to the "stories" array one at a time, and cleared for the next one
	NSMutableDictionary * item;
	
	// it parses through the document, from top to bottom...
	// we collect and cache each sub-element value, and then save each item to our array.
	// we use these to track each current item, until it's ready to be added to the "stories" array
	NSString * currentElement;
	NSMutableString * currentTitle, * currentDate, * currentSummary, * currentLink;
}


@end
 
RootViewController.m

//
// RootViewController.m
// TAB RSS reader
//
// Created by Jason Terhorst on 7/28/08.
// Copyright AstoundingCookie, LLC 2008. All rights reserved.
//

#import "RootViewController.h"
#import "TAB_RSS_readerAppDelegate.h"


@implementation RootViewController


- (void)viewDidLoad {
// Add the following line if you want the list to be editable
// self.navigationItem.leftBarButtonItem = self.editButtonItem;
}


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


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


- (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:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];

return cell;
}


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

int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];

NSString * storyLink = [[stories objectAtIndex: storyIndex] objectForKey: @"link"];

// clean up the link - get rid of spaces, returns, and tabs...
storyLink = [storyLink stringByReplacingOccurrencesOfString:mad:" " withString:mad:""];
storyLink = [storyLink stringByReplacingOccurrencesOfString:mad:"\n" withString:mad:""];
storyLink = [storyLink stringByReplacingOccurrencesOfString:mad:" " withString:mad:""];

NSLog(@"link: %@", storyLink);
// open in Safari
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:storyLink]];
}


- (void)viewWillAppear: (BOOL)animated {
[super viewWillAppear:animated];
}

- (void)viewDidAppear: (BOOL)animated {
[super viewDidAppear:animated];

if ([stories count] == 0) {
NSString * path = @"http://cakesinthecity.blogspot.com/feeds/posts/default?alt=rss";
[self parseXMLFileAtURL: path];
}

cellSize = CGSizeMake([newsTable bounds].size.width, 60);
}


- (void)viewWillDisappear: (BOOL)animated {
}

- (void)viewDidDisappear: (BOOL)animated {
}




- (void)parserDidStartDocument: (NSXMLParser *)parser{
NSLog(@"found file and started parsing");

}

- (void)parseXMLFileAtURL: (NSString *)URL
{
stories = [[NSMutableArray alloc] init];

//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 story feed from web site (Error code %i )", [parseError code]];
NSLog(@"error parsing XML : %@", errorString);

UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:mad:"Error loading content" message:errorString delegate:self cancelButtonTitle:mad:"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"];

[stories addObject: [item copy]];
NSLog(@"adding story: %@", 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(@"stories array has %d items", [stories count]);
[newsTable 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 {

[currentElement release];
[rssParser release];
[stories release];
[item release];
[currentTitle release];
[currentDate release];
[currentSummary release];
[currentLink release];

[super dealloc];
}


@end
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.