问题描述:

Hey Guys another question!

Once again I would like to state that i am new to this and therefore my ability to understand the language Objective C and the Xcode application is limited! So Your help really and truly is appreciated greatly!

I built a countdown app that shows when a radio station is going to be going live, the countdown worked perfectly and updated in realtime once a second, then I inserted it into an "If-Statement" so that when the day of the station launch arrives the countdown disappears, but now my countdown does not update in realtime it just sits static.

The following is my code:

 - (void)viewDidAppear:(BOOL)animated {

self.today = [NSDate date];

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

[dateformatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];

NSString *launchDay = [[NSString alloc] initWithString:@"11/26/2010 11:59:59"];

NSDate *currentDate = [dateformatter dateFromString:launchDay];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

int unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags fromDate:today toDate:currentDate options:0];

if ([today timeIntervalSinceDate:currentDate] <= 0 ){

self.today = [NSDate date];

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

[dateformatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];

countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", components.day, components.hour, components.minute, components.second ];

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES];

[self updateLabel];

days.text = @"Days";

hours.text = @"Hours";

mins.text = @"Mins";

secs.text = @"Secs";

until.text = @"Until XtremeFM Launch!";

}

else {

countdownLabel.text [email protected]"XtremeFM is LIVE";

}

}

Guys any help is greatly appreciated and I really hope someone out there can help me!

Thanks guys,

Phil

ok here is the code for the whole .M file of the home screen

#import "XtremeFMViewController.h"

@implementation XtremeFMViewController

/*

// The designated initializer. Override to perform setup that is required before the view is loaded.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {

// Custom initialization

}

return self;

}

*/

/*

// Implement loadView to create a view hierarchy programmatically, without using a nib.

- (void)loadView {

}

*/

@synthesize countdownLabel, today, timer, todayDate, days, hours, mins, secs, until;

-(void)updateLabel {

self.today = [NSDate date];

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

[dateformatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];

//NSString *launchDay = [[NSString alloc] initWithString:@"11/26/2010 11:59:59"];

//NSDate *currentDate = [dateformatter dateFromString:launchDay];

//NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

//int unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

//NSDateComponents *components = [gregorian components:unitFlags fromDate:today toDate:currentDate options:0];

}

- (void)viewDidAppear:(BOOL)animated {

self.today = [NSDate date];

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

[dateformatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];

NSString *fathersDay = [[NSString alloc] initWithString:@"11/26/2010 11:59:59"];

NSDate *currentDate = [dateformatter dateFromString:fathersDay];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

int unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags fromDate:today toDate:currentDate options:0];

if ([today timeIntervalSinceDate:currentDate] <= 0 ){

self.today = [NSDate date];

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

[dateformatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];

countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", components.day, components.hour, components.minute, components.second ];

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES];

[self updateLabel];

days.text = @"Days";

hours.text = @"Hours";

mins.text = @"Mins";

secs.text = @"Secs";

until.text = @"Until XtremeFM Launch!";

}

else {

countdownLabel.text [email protected]"XtremeFM is LIVE";

}

}

  • (IBAction)watchLive {

    self.today = [NSDate date];

    NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];

    [dateformatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];

    NSString *launchDay = [[NSString alloc] initWithString:@"11/26/2010 11:59:00"];

    NSDate *currentDate = [dateformatter dateFromString:launchDay];

    //NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    //int unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    //NSDateComponents *components = [gregorian components:unitFlags fromDate:today toDate:currentDate options:0];

    //countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", components.day, components.hour, components.minute, components.second ];

    if ([today timeIntervalSinceDate:currentDate] >= 0 ){

    NSString *webpage = @"http://xphiltestpagex.is.livestream-api.com/livestreamiphone/philtestpage/playlist.m3u8";

    NSURL *nswebpage = [NSURL URLWithString:webpage];

    NSURLRequest *nsurl = [NSURLRequest requestWithURL:nswebpage];

    [webView loadRequest:nsurl];

    }

    else {

    UIAlertView*alert = [[UIAlertView alloc] initWithTitle:@"Coming Soon" message:@"Feed goes live Friday 26th November 12:00pm" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];

    [alert show];

    [alert release];

    }

}

-(IBAction)requestsPage {

RequestsPageViewController *move = [[RequestsPageViewController alloc]initWithNibName:nil bundle:nil];

move.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentModalViewController:move animated:YES];

[move release];

}

-(IBAction)twitterButton {

RequestsPageViewController *move = [[RequestsPageViewController alloc]initWithNibName:nil bundle:nil];

move.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentModalViewController:move animated:YES];

[move release];

}

/*

// 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;

    }

  • (void)dealloc {

    [super dealloc];

    }

@end

See I had a (BOOL)animated on the ViewDidAppear but I am not sure how to add this into the if-statement (Noob)

网友答案:

I find NSLog() invaluable for tracking down things that don't fire conditionals correctly.

Immediately before your if(), go:

NSLog(@"%d", [today timeIntervalSinceDate:currentDate]);

And then look and see what you get on the console.

One place I've messed up this sort of thing is to test the values in the wrong order, so what I expect to be negative is positive and vice versa.

Also, you're leaking pretty much everything you allocate in that code. Go back through and release everything you alloc please!

相关阅读:
Top