2

特定の番号の曜日名が必要です。ここに疑似コードがあります:

getDayStringForInt:0 = sunday
getDayStringForInt:1 = monday
getDayStringForInt:2 = tuesday
getDayStringForInt:3 = wenesday
getDayStringForInt:4 = thursday
getDayStringForInt:5 = friday
getDayStringForInt:6 = saturday

次のコードを試してみましたが、うまくいかないことがあります...

- (void) setPeriodicityDayOfWeek:(NSNumber *)dayOfWeek{
    gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *frLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    [dateFormatter setLocale:frLocale];
    [gregorian setLocale:frLocale];
    NSDate *today = [NSDate date];
    NSDateComponents *nowComponents = [gregorian components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];

    [nowComponents setWeekday:dayOfWeek];

    NSDate *alertDate = [gregorian dateFromComponents:nowComponents];

    [dateFormatter setDateFormat:@"EEEE"];
    NSLog(@"Day Of Week : %@ - Periodicity : %@", dayOfWeek, [dateFormatter stringFromDate:alertDate]);
    alert.periodicity = [dateFormatter stringFromDate:alertDate];

}

私のログは非常に奇妙です:

Day Of Week : 0 - Periodicity : monday
Day Of Week : 1 - Periodicity : wenesday
Day Of Week : 2 - Periodicity : friday
Day Of Week : 3 - Periodicity : friday
Day Of Week : 4 - Periodicity : tuesday
Day Of Week : 5 - Periodicity : sunday
Day Of Week : 6 - Periodicity : sunday

何か案が ?より良い解決策...

4

3 に答える 3

8

これが受け入れられた回答になったので、ここにも「正しい」ソリューションを投稿します。ロブの答えへのクレジット。

[shortWeekdaySymbols][1]の方法を使用して全体を簡単に実現できるNSDateFormatterため、完全なソリューションは次のようになります。

- (NSString *)stringFromWeekday:(NSInteger)weekday {
    NSDateFormatter * dateFormatter = [NSDateFormatter new];
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    return dateFormatter.shortWeekdaySymbols[weekday];
}

元の答え

NSNumberを必要とするメソッドへのポインターを渡していることに注意してくださいNSInteger。ポインターは実際には整数であり、期待するものではないため、コンパイラーは警告しません。次の簡単なテストを検討してください。

- (void)foo:(NSInteger)a {
    NSLog(@"%i", a);
}

- (void)yourMethod {
    [self foo:@1]; // @1 is the boxed expression for [NSNumber numberWithInt:1]
}

185035664これは、ポインタ値である のようなものを出力します。つまりNSNumber *、 にキャストした場合NSIntegerです。

メソッド シグネチャでを使用する[dayOfWeek integerValue]か、直接変換dayOfWeekする必要があります。NSInteger

また、あなたは何か他の問題を抱えていると思います: のドキュメントからsetWeekday:

受信機の平日単位数を設定します。曜日の単位は 1 ~ n の数字で、n は 1 週間の日数です。たとえば、グレゴリオ暦では n は 7 で、日曜日は 1 で表されます。

日曜は1なので、担当者とのやり取りもチェックしたほうがいいです。

于 2013-08-19T14:45:25.023 に答える
1

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/instm/NSDateFormatter/weekdaySymbolsを参照してください。

dayname を取得するには、weekdaySymbols を使用するだけです。

于 2013-08-19T16:33:30.490 に答える
0

すべての人に感謝します。ここにきれいな応答があります:

/**
 *  getting the day of week string for a given day of week number
 *
 *  @param  dayOfWeekNumber 0 return sunday, 6 return saturday
 *
 *  @return a string corresponding at the given day of week.
 */
- (NSString*) getDayOfWeekStringForDayOfWeek:(NSInteger)dayOfWeek{
    return [[dateFormatter shortWeekdaySymbols] objectAtIndex:dayOfWeek];
}
于 2013-08-19T15:16:33.987 に答える