比较Objective C(Xcode)中的两个字符串时如何使用“If”语句?

时间:2012-01-10 00:06:11

标签: objective-c ios xcode if-statement xcode4.2

我想在一周的每一天显示不同的网站。我创建了一个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];

6 个答案:

答案 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
  1. 在第一个实例中,您调用isEqualToString:方法,因此NSString比较字符串的内容是否相等。

  2. 在第二个实例中,您使用==这是一个指针比较。指针Tuesday将指向与[dayofweekformatter stringFromDate:[NSDate date]];

  3. 返回的对象不同的对象

    因此请确保为您正在处理的类型使用正确的比较方法。

    你比较不同的变量也是值得的。在您要比较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 (...)