Adding item to my tableview from button

Discussion in 'iOS Programming' started by Samppaa, May 31, 2010.

  1. Samppaa macrumors regular

    Joined:
    Mar 26, 2010
    #1
    Hey, I got a little problem and I don't want to get stuck on it for all night so I decided to show it there, btw this is really a noob thing, but I am just learning from a book and some tutorials and decided to try to make something own this time, I just like this way of learning that you expiriment some things and ask for help when you really get stuck hard and have tried things etc... I don't want to constantly read a book, but to try things. So I was reading a tutorial, but it didn't show how I can add things to the tableview. I know that I have to add the item to that array and I made a function in my rootcontroller and linked to button, but how I can reload the table from controller so it shows on the list? Here is code for you guys:

    RootViewController.h
    Code:
    //
    //  RootViewController.h
    //  TableViewTest
    //
    //  Created by Samuli Lehtonen on 31.5.2010.
    //  Copyright Test 2010. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UITableViewController {
    	NSMutableArray *listOfItems;
    }
    
    -(IBAction)AddItemToArray(id)sender;
    
    @end
    
    
    RootViewController.m
    Code:
    //
    //  RootViewController.m
    //  TableViewTest
    //
    //  Created by Samuli Lehtonen on 31.5.2010.
    //  Copyright Test 2010. All rights reserved.
    //
    
    #import "RootViewController.h"
    
    
    @implementation RootViewController
    
    
    #pragma mark -
    #pragma mark View lifecycle
    
    -(IBAction)AddItemToArray(id)sender
    {
    	[listOfItems addObject:@"Finland"];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    	
    	listOfItems = [[NSMutableArray alloc] init];
    	
    	[listOfItems addObject:@"IceLand"];
    	[listOfItems addObject:@"Greenland"];
    	[listOfItems addObject:@"Switzerland"];
    	[listOfItems addObject:@"Norway"];
    	[listOfItems addObject:@"New Zealand"];
    	[listOfItems addObject:@"Greece"];
    	[listOfItems addObject:@"Italy"];
    	[listOfItems addObject:@"Ireland"];
    	
    	self.navigationItem.title = @"Countries";
    
        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    }
    
    
    /*
    - (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);
    }
     */
    
    
    #pragma mark -
    #pragma mark Table view data source
    
    // Customize the number of sections in the table view.
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }
    
    
    // Customize the number of rows in the table view.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [listOfItems 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] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        }
        
    	// Configure the cell.
    	NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
    	cell.text = cellValue;
    
        return cell;
    }
    
    
    /*
    // 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:UITableViewRowAnimationFade];
        }   
        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;
    }
    */
    
    
    #pragma mark -
    #pragma mark Table view delegate
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        
    	/*
    	 <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
         // ...
         // Pass the selected object to the new view controller.
    	 [self.navigationController pushViewController:detailViewController animated:YES];
    	 [detailViewController release];
    	 */
    }
    
    
    #pragma mark -
    #pragma mark Memory management
    
    - (void)didReceiveMemoryWarning {
        // Releases the view if it doesn't have a superview.
        [super didReceiveMemoryWarning];
        
        // Relinquish ownership any cached data, images, etc that aren't in use.
    }
    
    - (void)viewDidUnload {
        // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
        // For example: self.myOutlet = nil;
    }
    
    
    - (void)dealloc {
    	[listOfItems release];
        [super dealloc];
    }
    
    
    @end
    
    
    So what I mean is how do I reload the table to make the finland show there?
     
  2. KoolStar macrumors demi-god

    KoolStar

    Joined:
    Oct 16, 2006
    Location:
    Kentucky
    #2
    just call [self.tableView reloadData] at the end of the add method.
     
  3. Samppaa thread starter macrumors regular

    Joined:
    Mar 26, 2010
  4. PhoneyDeveloper macrumors 68040

    PhoneyDeveloper

    Joined:
    Sep 2, 2008
    #4
    That is the correct solution to your very simple code.

    How does it crash? What do you see in the console?
     
  5. akira1985 macrumors newbie

    Joined:
    May 28, 2010
    #5
    change your adding action to:
    Code:
    -(IBAction)AddItemToArray:(id)sender
    {
    	[listOfItems addObject:@"Finland"];
    	NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:([listOfItems count] - 1) inSection:0];
    	[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationRight];
    }
    
    This code should work out just fine, i've tested it on my simulator, in case something went wrong unexpectedly, just keep me updated.
     
  6. Samppaa thread starter macrumors regular

    Joined:
    Mar 26, 2010
    #6
    Crashes with that code also:
    [Session started at 2010-06-01 17:38:04 +0300.]
    2010-06-01 17:38:08.622 TableViewTest[953:207] *** -[RootViewController AddItem:]: unrecognized selector sent to instance 0x391bf50
    2010-06-01 17:38:08.624 TableViewTest[953:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[RootViewController AddItem:]: unrecognized selector sent to instance 0x391bf50'
    2010-06-01 17:38:08.624 TableViewTest[953:207] Stack: (
    29291611,
    2440811785,
    29673531,
    29242998,
    29095618,
    2720773,
    4634529,
    2720773,
    3128142,
    3136879,
    3132091,
    2825695,
    2734024,
    2760801,
    37387609,
    29076352,
    29072456,
    37381653,
    37381850,
    2764719,
    8256
    )
     
  7. dejo Moderator

    dejo

    Staff Member

    Joined:
    Sep 2, 2004
    Location:
    The Centennial State
    #7
    RootViewController has no AddItem: method declared.
     

Share This Page