Как использовать операторы «If» при сравнении двух строк в Objective C (XCode)? - PullRequest
4 голосов
/ 10 января 2012

Я пытаюсь отображать разные веб-сайты в каждый день недели. Я создал строку 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 ]

11 голосов
/ 10 января 2012

Лучшим решением было бы следующее, используя индекс дня недели для определения вашего URL:

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: метод

- (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
    */
}
3 голосов
/ 10 января 2012

Я разочарован во всех вас, кто ответил до сих пор.

Да - вы правильно указываете разницу между равенством указателей и равенством значений.

Но вы не указываете на то, что спрашивающий идет не так, как надо в тестировании по будням - это реальный вопрос, который он задал.

Другое решение актуальной проблемы:

У вас есть дата - вы можете превратить ее в 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.

3 голосов
/ 10 января 2012

Вы можете использовать формат даты @ "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 голосов
/ 10 января 2012

Вы использовали isEqualToString для первой проверки, что хорошо, но затем выполните следующее сравнение, используя ==.
Используйте else if ([dateToday isEqualToString:tuesday])

Также, как примечание, ваша переменнаяимя должно начинаться со строчной буквы.

2 голосов
/ 10 января 2012

Найдите разницу

if ([DayOfWeek isEqualToString:Monday])  // 1
if (dateToday == Tuesday)                // 2
  1. В первом случае вы вызываете метод isEqualToString:, поэтому NSString сравнивает содержимое строки на равенство.

  2. Во втором случае вы используете == это сравнение указателей.Указатель Tuesday будет указывать на объект, отличный от того, который был возвращен [dayofweekformatter stringFromDate:[NSDate date]];

Поэтому убедитесь, что вы используете правильные методы сравнения для типа, которым вы являетесьИмея дело.

Тоже ничего не стоит сравнивать разные переменные.В первом if вы сравниваете DayOfWeek во втором if вы сравниваете dateToday.

Обновление

Выглядит так, как будто вы можетепришли к Objective-C с другого языка, поэтому, возможно, стоит просмотреть документы Apple для Рекомендации по кодированию , он просто дает несколько быстрых примеров того, как вещи обычно называются в Objective-C

1 голос
/ 10 января 2012

Вы не правильно разбираетесь ни с одним другим делом, кроме понедельника. Вам нужно добавить больше кода, как раньше (с isEqualToString вместо ==):

if ([DayOfWeek isEqualToString:Monday])

{ 
    /* code here */
}

else if ([DayOfWeek isEqualToString:Tuesday])

{ 
    /* code here */
}

else if ([DayOfWeek isEqualToString:Wednesday])

{ 
    /* code here */
}

else if (...)
...