Note that there are some explanatory texts on larger screens.

plurals
  1. POSegmentedControl to change TableView data
    primarykey
    data
    text
    <p>I have a tableview with a segmentedControl in the header, i want the segment control to change the data depending on which segment is clicked, in this case Upcoming/Weekly.</p> <p>Both data sources come from an XML file on my server, which is the part im having trouble with, as im still new to using NSXMLParser</p> <p>ive messed around with some code, but to no avail. I know that my segmentAction is being picked up because ive used logs to do so. attached is code and an image of my table, cheers</p> <p><strong><em>When i click a segmented control, the tableview doesnt update with the new XML source</em></strong> </p> <p>:)</p> <p><img src="https://i.stack.imgur.com/1m2jv.png" alt="enter image description here"></p> <p><strong>RootViewController.h</strong></p> <pre><code>#import &lt;UIKit/UIKit.h&gt; @class XMLAppDelegate, BookDetailViewController; @interface RootViewController : UITableViewController &lt;UITableViewDelegate&gt; { XMLAppDelegate *appDelegate; BookDetailViewController *bdvController; UITableViewCell *eventUpCVCell; UILabel *month; UILabel *title; UILabel *date; UISegmentedControl *segmentedControl; } @property (nonatomic, retain) IBOutlet UITableViewCell *eventUpCVCell; @property (nonatomic, retain) IBOutlet UISegmentedControl *segmentedControl; @property (nonatomic, retain) IBOutlet UILabel *month; @property (nonatomic, retain) IBOutlet UILabel *title; @property (nonatomic, retain) IBOutlet UILabel *date; @end </code></pre> <p><strong>RootViewController.m</strong></p> <pre><code>#import "RootViewController.h" #import "XMLAppDelegate.h" #import "Book.h" #import "BookDetailViewController.h" #define kLabel1Tag 1 #define kLabel2Tag 2 #define kLabel3Tag 3 @implementation RootViewController @synthesize eventUpCVCell, segmentedControl; @synthesize month, title, date; -(void)viewDidLoad { appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; self.title = @"Upcoming Events"; [super viewDidLoad]; NSURL *urlUpcoming = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsUpcoming.xml"]; NSURL *urlWeekly = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsWeekly.xml"]; } -(IBAction)segmentedAction:(id)sender { XMLAppDelegate *mainDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; segmentedControl = (UISegmentedControl *)sender; if (segmentedControl.selectedSegmentIndex == 0) { mainDelegate.url = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsUpcoming.xml"]; [self.tableView reloadData]; } else if (segmentedControl.selectedSegmentIndex == 1) { NSLog(@"Hello 2"); mainDelegate.url = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsWeekly.xml"]; [self.tableView reloadData]; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 66; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [appDelegate.eventDataUp count]; } etc etc... </code></pre> <p><strong>XMLAppDelegate.h</strong></p> <pre><code>#import &lt;UIKit/UIKit.h&gt; @interface XMLAppDelegate : NSObject &lt;UIApplicationDelegate&gt; { UIWindow *window; UINavigationController *navigationController; NSString *url; NSMutableArray *eventDataUp; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UINavigationController *navigationController; @property (nonatomic, retain) NSString *url; @property (nonatomic, retain) NSMutableArray *eventDataUp; @end </code></pre> <p><strong>XMLAppDelegate.m</strong></p> <pre><code>#import "XMLAppDelegate.h" #import "RootViewController.h" #import "XMLParser.h" @implementation XMLAppDelegate @synthesize window; @synthesize navigationController, eventDataUp; @synthesize url; - (void)applicationDidFinishLaunching:(UIApplication *)application { //RootViewController *rvController = [[RootViewController alloc] init]; NSURL *urlUpcoming = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsUpcoming.xml"]; // NSURL *urlWeekly = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsWeekly.xml"]; NSURL *url = urlUpcoming; NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; //Initialize the delegate. XMLParser *parser = [[XMLParser alloc] initXMLParser]; //Set delegate [xmlParser setDelegate:parser]; //Start parsing the XML file. BOOL success = [xmlParser parse]; if(success) NSLog(@"No Errors"); else NSLog(@"Error Error Error!!!"); // Configure and show the window [window addSubview:[navigationController view]]; [window makeKeyAndVisible]; } - (void)applicationWillTerminate:(UIApplication *)application { // Save data if appropriate } - (void)dealloc { [eventDataUp release]; [navigationController release]; [window release]; [super dealloc]; } @end </code></pre> <p><strong>XMLParser</strong></p> <pre><code>#import &lt;UIKit/UIKit.h&gt; @class XMLAppDelegate, Book; @interface XMLParser : NSObject { NSMutableString *currentElementValue; XMLAppDelegate *appDelegate; Book *eventUp; } - (XMLParser *) initXMLParser; @end // // XMLParser.m // XML // // Created by iPhone SDK Articles on 11/23/08. // Copyright 2008 www.iPhoneSDKArticles.com. // #import "XMLParser.h" #import "XMLAppDelegate.h" #import "Book.h" @implementation XMLParser - (XMLParser *) initXMLParser { [super init]; appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; return self; } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { if([elementName isEqualToString:@"EventsUpcoming"]) { //Initialize the array. appDelegate.eventDataUp = [[NSMutableArray alloc] init]; } else if([elementName isEqualToString:@"Event"]) { //Initialize the book. eventUp = [[Book alloc] init]; //Extract the attribute here. eventUp.eventUpID = [[attributeDict objectForKey:@"id"] integerValue]; NSLog(@"Reading id value :%i", eventUp.eventUpID); } NSLog(@"Processing Element: %@", elementName); } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(!currentElementValue) currentElementValue = [[NSMutableString alloc] initWithString:string]; else [currentElementValue appendString:string]; NSLog(@"Processing Value: %@", currentElementValue); } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if([elementName isEqualToString:@"EventsUpcoming"]) return; //There is nothing to do if we encounter the Books element here. //If we encounter the Book element howevere, we want to add the book object to the array // and release the object. if([elementName isEqualToString:@"Event"]) { [appDelegate.eventDataUp addObject:eventUp]; [eventUp release]; eventUp = nil; } else [eventUp setValue:currentElementValue forKey:elementName]; [currentElementValue release]; currentElementValue = nil; } - (void) dealloc { [eventUp release]; [currentElementValue release]; [super dealloc]; } @end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload