Created
November 12, 2009 21:41
-
-
Save quique123/233306 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// PlaceViewController.h | |
// TouristNov09 | |
// | |
// Created by Marcio Valenzuela on 11/11/09. | |
// Copyright 2009 Personal. All rights reserved. | |
// | |
#import <UIKit/UIKit.h> | |
#import "Place.h" // Import the places object header | |
@interface PlaceViewController : UITableViewController { | |
// Database variables | |
NSString *databaseName; | |
NSString *databasePath; | |
// Array to store the place objects | |
NSMutableArray *places; | |
} | |
@property (nonatomic,retain) NSMutableArray *places; | |
-(void)checkAndCreateDatabase; | |
-(void)readPlacesFromDatabase; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// PlaceViewController.m | |
// TouristNov09 | |
// | |
// Created by Marcio Valenzuela on 11/11/09. | |
// Copyright 2009 Personal. All rights reserved. | |
// | |
#import "PlaceViewController.h" | |
#import <sqlite3.h> // Import the SQLite database framework | |
@implementation PlaceViewController | |
@synthesize places; | |
- (id)initWithStyle:(UITableViewStyle)style { | |
// Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. | |
if (self = [super initWithStyle:style]) { | |
} | |
return self; | |
} | |
- (void)viewDidLoad { | |
[super viewDidLoad]; | |
self.title = @"Places"; | |
// Setup some globals | |
databaseName = @"AnimalDatabase.sql"; | |
// Get the path to the documents directory and append the databaseName | |
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); | |
NSString *documentsDir = [documentPaths objectAtIndex:0]; | |
databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; | |
// Execute the "checkAndCreateDatabase" function | |
[self checkAndCreateDatabase]; | |
// Query the database for all places records and construct the "places" array | |
[self readPlacesFromDatabase]; | |
// Uncomment the following line to display an Edit button in the navigation bar for this view controller. | |
// self.navigationItem.rightBarButtonItem = self.editButtonItem; | |
} | |
-(void)checkAndCreateDatabase{ | |
// Check if the SQL database has already been saved to the users phone, if not then copy it over | |
BOOL success; | |
// Create a FileManager object, we will use this to check the status | |
// of the database and to copy it over if required | |
NSFileManager *fileManager = [NSFileManager defaultManager]; | |
// Check if the database has already been created in the users filesystem | |
success = [fileManager fileExistsAtPath:databasePath]; | |
// If the database already exists then return without doing anything | |
if(success) return; | |
// If not then proceed to copy the database from the application to the users filesystem | |
// Get the path to the database in the application package | |
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; | |
// Copy the database from the package to the users filesystem | |
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; | |
[fileManager release]; | |
} | |
-(void)readPlacesFromDatabase{ | |
// Setup the database object | |
sqlite3 *database; | |
// Init the places Array | |
places = [[NSMutableArray alloc] init]; | |
// Open the database from the users filessytem | |
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { | |
NSLog(@"db opens fine"); | |
// Setup the SQL Statement and compile it for faster access | |
const char *sqlStatement = "select * from places"; | |
sqlite3_stmt *compiledStatement; | |
NSLog(@"sets, compiles, databasePath=%s, sqlStatement=%s",[databasePath UTF8String],sqlStatement); | |
//prepare the SQL statement for execution | |
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { | |
NSLog(@"compiledStmnt should not be null %@",compiledStatement); | |
// Step thru SQL & Loop through the results and add them to the feeds array | |
while(sqlite3_step(compiledStatement) == SQLITE_ROW) { | |
// Read the data from the result row | |
NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; | |
NSString *aDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; | |
NSString *aCountry = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; | |
NSString *aplaceImageURL = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]; | |
NSLog(@"aCountry is %@", aCountry); | |
// Create a new animal object with the data from the database | |
Place *placeObject = [[Place alloc] initWithplaceName:aName | |
placeCountry:aCountry | |
placeDescription:aDescription | |
placeImageURL:aplaceImageURL]; | |
// Add the placeObject to the places Array | |
[places addObject:placeObject]; | |
[placeObject release]; | |
} | |
} | |
// Release the compiled statement from memory | |
sqlite3_finalize(compiledStatement); | |
} | |
sqlite3_close(database); | |
} | |
/* | |
- (void)viewWillAppear:(BOOL)animated { | |
[super viewWillAppear:animated]; | |
} | |
*/ | |
/* | |
- (void)viewDidAppear:(BOOL)animated { | |
[super viewDidAppear:animated]; | |
} | |
*/ | |
/* | |
- (void)viewWillDisappear:(BOOL)animated { | |
[super viewWillDisappear:animated]; | |
} | |
*/ | |
/* | |
- (void)viewDidDisappear:(BOOL)animated { | |
[super viewDidDisappear:animated]; | |
} | |
*/ | |
/* | |
// Override to allow orientations other than the default portrait orientation. | |
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { | |
// Return YES for supported orientations | |
return (interfaceOrientation == UIInterfaceOrientationPortrait); | |
} | |
*/ | |
- (void)didReceiveMemoryWarning { | |
// Releases the view if it doesn't have a superview. | |
[super didReceiveMemoryWarning]; | |
// Release any cached data, images, etc that aren't in use. | |
} | |
- (void)viewDidUnload { | |
// Release any retained subviews of the main view. | |
// e.g. self.myOutlet = nil; | |
} | |
#pragma mark Table view methods | |
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { | |
return 1; | |
} | |
// Customize the number of rows in the table view. | |
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |
return [places count]; | |
} | |
// Customize the appearance of table view cells. | |
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |
static NSString *CellIdentifier = @"Cell"; | |
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; | |
if (cell == nil) { | |
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; | |
} | |
// Set up the cell... | |
cell.textLabel.text = [places objectAtIndex:indexPath.row]; | |
return cell; | |
} | |
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |
// Navigation logic may go here. Create and push another view controller. | |
//PlaceDetailViewController *anotherViewController = [[PlaceDetailViewController alloc] initWithNibName:@"PlaceDetailViewController" bundle:nil]; | |
//PlaceDetailViewController.receivedPlaceName = [place objectAtIndex:indexPath.row]; | |
//[self.navigationController pushViewController:anotherViewController]; | |
//[anotherViewController release]; | |
} | |
/* | |
// Override to support conditional editing of the table view. | |
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { | |
// Return NO if you do not want the specified item to be editable. | |
return YES; | |
} | |
*/ | |
/* | |
// Override to support editing the table view. | |
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { | |
if (editingStyle == UITableViewCellEditingStyleDelete) { | |
// Delete the row from the data source | |
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; | |
} | |
else if (editingStyle == UITableViewCellEditingStyleInsert) { | |
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view | |
} | |
} | |
*/ | |
/* | |
// Override to support rearranging the table view. | |
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { | |
} | |
*/ | |
/* | |
// Override to support conditional rearranging of the table view. | |
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { | |
// Return NO if you do not want the item to be re-orderable. | |
return YES; | |
} | |
*/ | |
- (void)dealloc { | |
[super dealloc]; | |
[places release]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment