我想在一周的每一天显示不同的网站。我创建了一个NSString,它使用NSDateFormatter只包含一周中的当前日期。然后,我为一周中的每一天创建了额外的字符串。我在“IF”语句中比较两者......所以如果字符串(天)相等,它将在if语句中执行该函数。如果没有,它会检查下一个语句。现在它将适用于周一的第一个声明,但是当我在iPhone上更改日期以模拟一周中的其他日期时,它将无效。我的代码在下面!
NSDateFormatter *dayofweekformatter = [[NSDateFormatter alloc] init];
[dayofweekformatter setDateFormat:@"cccc"];
NSString *DayOfWeek = [dayofweekformatter stringFromDate:[NSDate date]];
NSString *Monday = @"Monday";
NSString *Tuesday = @"Tuesday";
NSString *Wednesday = @"Wednesday";
NSString *Thursday = @"Thursday";
NSString *Friday = @"Friday";
NSString *Saturday = @"Saturday";
NSString *Sunday = @"Sunday";
if ([DayOfWeek isEqualToString:Monday])
{ // Webview code
NSString *urlAddress = @"http://www.google.com";
//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];
//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[webview loadRequest:requestObj];
}
else if (dateToday == Tuesday)
{ // Webview code
NSString *urlAddress = @"http://www.cnn.com";
//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];
//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[webview loadRequest:requestObj];
答案 0 :(得分:11)
更好的解决方案如下,使用工作日的索引来确定您的网址:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
NSInteger weekday = [components weekday];
NSString *urlString;
switch(weekday){
case 1: // sunday
urlString = @"http://google.com";
break;
case 2:
urlString = @"http://twitter.com";
break;
case 3:
urlString = @"http://facebook.com";
break;
case 4:
urlString = @"http://yahoo.com";
break;
case 5:
urlString = @"http://mashable.com";
break;
case 6:
urlString = @"http://bbc.co.uk";
break;
case 7: // saturday
urlString = @"http://stackoverflow.com";
break;
default:
urlString = @"http://google.com?q=weekday+is+never+this!";
break;
}
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[webview loadRequest:requestObj];
要按照您对评论的要求刷新支票,您可以执行以下操作:
在您的应用程序委托文件中,将此行添加到applicationDidBecomeActive:method
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshDateCheck" object:nil];
}
在您的班级中,您正在进行日期检查,在init方法中添加此行以收听应用程序退出后台时发送的任何刷新通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod) name:@"refreshDateCheck" object:nil];
最后将日期检查代码移到此方法,该方法在收到通知时调用:
-(void)myMethod{
/*
Your other code goes in here
*/
}
答案 1 :(得分:3)
您使用isEqualToString
进行首次检查,这很好,但随后使用==
执行下一次比较。
使用else if ([dateToday isEqualToString:tuesday])
另外,作为附注,您的变量名称应以小写字母开头。
答案 2 :(得分:3)
您可以使用@“E”日期格式获取一周中的数字日期。现在,您不依赖于特定于语言的字符串。
NSDateFormatter *dayofweekformatter = [[NSDateFormatter alloc] init];
[dayofweekformatter setDateFormat:@"E"];
NSString *DayOfWeek = [dayofweekformatter stringFromDate:[NSDate date]];
NSInteger weekDay = [DayOfWeek integerValue];
switch (weekDay) {
case 1: // Sunday
break;
case 2: // Monday
break;
default:
break;
}
答案 3 :(得分:3)
我对你们现在回答的所有人感到失望。
是的 - 您正确地指出了指针相等和值相等之间的区别。
但你并没有指出提问者在平日测试方面做错了 - 这是他提出的真正问题。
针对实际问题的不同解决方案:
你有一个日期 - 你可以把它变成NSDateComponents - 它有一个weekday
方法返回一个NSInteger,在格里高利的情况下 - 返回1表示星期日,2表示星期一,等等
例如 - 这可以直接从Apple文档的日历计算部分获取
NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
NSInteger day = [weekdayComponents day];
NSInteger weekday = [weekdayComponents weekday];
现在你可以使用switch语句。
答案 4 :(得分:2)
发现差异
if ([DayOfWeek isEqualToString:Monday]) // 1
if (dateToday == Tuesday) // 2
在第一个实例中,您调用isEqualToString:
方法,因此NSString
比较字符串的内容是否相等。
在第二个实例中,您使用==
这是一个指针比较。指针Tuesday
将指向与[dayofweekformatter stringFromDate:[NSDate date]];
因此请确保为您正在处理的类型使用正确的比较方法。
你比较不同的变量也是值得的。在您要比较if
的第二个DayOfWeek
中的第一个if
{。}}。
更新
看起来你可能已经从另一种语言来到Objective-C,因此可能值得浏览一下Coding Guidelines的Apple文档它只是提供了一些关于如何在Objective-C中命名事物的简单示例
答案 5 :(得分:1)
除了星期一之外你没有正确处理任何其他案件。您需要像以前一样添加更多代码(使用isEqualToString
代替==
):
if ([DayOfWeek isEqualToString:Monday])
{
/* code here */
}
else if ([DayOfWeek isEqualToString:Tuesday])
{
/* code here */
}
else if ([DayOfWeek isEqualToString:Wednesday])
{
/* code here */
}
else if (...)