2011-09-16 10 views
2

特定の日にローカル通知を発行する方法を理解しようとしています。NSCalendarユニットの理解(私が5歳だったかのように説明してください)

私はカレンダー単位を使用する必要がありますが、私がそれらについて見つけた説明は臭い部分です。皆さんは私が5歳のように説明してください、彼らはどのような間隔を表していますか?

私は私が知っていると思うものを埋めました。私が間違っていて、他の人を埋めるなら、私を修正してください。

NSEraCalendarUnit = ????? era? 
NSYearCalendarUnit = event will repeat once in a year at the same month, day and hour 
NSMonthCalendarUnit = event will repeat once a month at the same day and hour 
NSDayCalendarUnit = event will repeat every day at the same hour 
NSHourCalendarUnit = event will repeat every hour at the same minute 
NSMinuteCalendarUnit = event will repeat every minute at the same second 
NSSecondCalendarUnit = event will repeat every second 
NSWeekCalendarUnit = event will repeat the same day of week every week 
NSWeekdayCalendarUnit = ?????? can I make it repeat just specific days? I mean, monday to friday but not saturday and sunday? 
NSWeekdayOrdinalCalendarUnit = ????? how do I use that? 
NSQuarterCalendarUnit = when exactly will it repeat? every 3 months? 
NSCalendarCalendarUnit = ????????? 
NSTimeZoneCalendarUnit = ???????? 

これは私が何をする必要があるかの例である:月曜日から毎日発射する

  • UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease]; 
    if (alarm) 
    { 
        alarm.fireDate = aDate; 
        alarm.timeZone = [NSTimeZone systemTimeZone]; 
        alarm.repeatInterval = WHAT DO I PUT HERE? TO MAKE IT REPEAT JUST SATURDAYS AND SUNDAYS?; 
        alarm.soundName = @"alarm.caf"; 
        alarm.alertBody = @"hi there"; 
        [app scheduleLocalNotification:alarm]; 
    } 
    

    は、私はこれらの可能性のうちの1つでローカルの通知をプログラムする必要があります土曜日と日曜日を除く金曜日まで

  • 土曜日と日曜日を除くすべての火曜日に火曜日
  • は毎週同じ週の曜日に繰り返されます

これを達成するにはどのような値を使用しますか?

ありがとうございました

答えて

2

私はあなたがしたいことができないと信じています。 This questionはさらに詳細を与えるかもしれません。

もちろん、週に2回、土曜日に1回、日曜日に1回、2回別々のローカル通知を行うこともできます。

+0

良いアイデア、ありがとう。私の質問に疑問符をつけたエントリはどうしたらいいのですか? NSWeekdayCalendarUnitは何ですか? NSCalendarCalendarUnitはどうですか? Appleはこれらの人に卑劣な文書を書いてもらう必要があります。彼らのドキュメントは、品質の話す彼らの製品の逆です。 – SpaceDog

-1

あなたは間違ったやり方をしています。

私は5歳(彼がobj/cを5で理解することができれば私は彼をすぐに雇うことができます)と言うでしょう。

あなたは何をしたいですか?アラームを発したい、または特定の曜日に特定のアクションを実行したいと思っていますか?

彼はおそらく「私は知らない」と言っていますが、ここでは実際には土曜日と日曜日に特定のアクションを実行したいと考えています。

これを実行するには、実際には毎日、毎時間、毎分実行するタイマーが本当に必要です。タイマーはアクションが実行されるかどうかを確認するアクションをトリガします発生する。

NSTimer* aTimer = [[NSTimer alloc] initWithFireDate:[NSDate date] 
                interval:3600*24 // every 24 hours for example 
                target:self 
                selector:@selector(onTimerTriggered:) 
                userInfo:nil 
                repeats:YES]; 

今、あなたが実際に曜日を確認する必要があります。最も重要なことは、これが別々に行われることです。

- (void)onTimerTriggered:(id)sender 
{ 
    // Create your calendar (gregorian is what you need) 
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

    // Create your components specified to only keep track of the week day of today 
    NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]]; 

    // now you know which day we are !! (careful in the US, sunday is first day of the week) 
    int weekday = [weekdayComponents weekday]; 

    // trigger alarm if needed 
    if (weekday == 3 || weekday == 5) // wednesday or saturday 
    { ... } // trigger your alarm instantly or wait until a specific hour it's up to you 
} 

したがって、問題をより具体的なアクションに分解してください。別の日に特定のアクションを作成するアクションを実行したいですか?それは

  • アクションで曜日

    1. チェック!

    NS--CalendarUnitはAppleがNSDateComponentsを呼んでいるものの中に特定の日付を分解するために使用されているが、これは間違いなく日付分解を扱うのアップルの方法であり、他の言語用鋼で書かれていません。

  • +0

    ありがとうございますが、私の問題は、タイマーを大きな間隔で使用してアラームを発生させることはできません。タイマーは、アプリが動作しているときに機能します。問題はこれです。いつかアプリは終了します。私は、アプリケーションが終了する前に、UILocalNotificationsでiOSをプログラムする必要があります。これは、アプリケーションが実行中に終了した後にイベントが発生する可能性があることを私が知る唯一の方法です。私がそれをしなければ、出来事は解雇されません。私がUILocalNotificationsのために必要とする周期性は、私の質問の最後に述べたthosです。私が見ていないのは、あなたの答えをどのように使ってそれを行うことができるのかです。とにかくありがとう。 – SpaceDog

    +0

    本当に私の謝罪、私はあなたの問題を誤解しました。正しい解決策が私の知識を超えています。 – apouche

    +0

    問題ありません。とにかくありがとう。 – SpaceDog

    0

    Q:月曜日から金曜日まで毎日発射する、土曜日と日曜日

    除く

    A:ちょうどので、長い一日がフリーである、月、firedateの年(5つのUILocalNotificationインスタンスを取得し、月曜日から金曜日までthire firedateを設定平日はあなたが望む通りです)。その後、repeatInterval NSWeekdayCalendarUnit.UnitをUIApplicationに設定してください。

    (ps:他の質問も同じ方法で解決できます)うまくいきたいです!

    関連する問題