77
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[iOS] 「初回のみxxする」「xx回だけyyする」「xxからyy日経過した場合にzzする」的な処理を簡単に書く方法

Last updated at Posted at 2014-12-22

アプリを作っていると、特定のイベントの回数や実行時間に依存した処理を書くことが必要な場面が多々あります。
例えば以下の様な処理です。

  • ある機能を利用する際、初回時のみガイダンスを表示
  • ある機能を利用する際、最初の3回のみ使い方の説明を表示
  • 広告POPUPを1時間に1回のみ表示
  • 起動後にキャンペーンのお知らせを1日に1回だけ表示させたい

これらはイベントの回数や時刻を永続化するだけで簡単に書ける処理ではありますが、毎回同様の処理を書くのは手間でもあります。

そこで、このような用途のためにイベントの回数と時刻を永続化しておくだけのライブラリを書きました。

※Android版はこちらです。

SRGEventDateRecorder

導入してみる

Podfileに以下の行を追加してpod updateします。

Podfile
pod 'SRGEventDateRecorder'

導入後は利用するクラスファイルでSRGEventDateRecorder.hをimportすれば利用できます。

使い方

1イベントごとに1つのSRGEventDateRecorderインスタンスを作ります。
インスタンス生成時にそのイベントに対してユニークなKeyを割り当てます
例えば、ある機能を使うというイベントのkeyuse_my_awesome_featureだった場合、以下のようになります。

イベントの記録

SRGEventDateRecorder *recorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];
[recorder record]; // 記録

記録したデータの利用

SRGEventDateRecorder *eventRecorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];

// BOOL:イベント1度でも実行(記録)されたかどうか?
eventRecorder.didRecorded;

// NSUInteger: イベントが記録された回数
eventRecorder.recordedCount;

// NSDate:イベントが記録された日付
eventRecorder.recordedDate;

// BOOL: イベントが記録されてから1日経過してるかどうか?
[eventRecorder didElapsedSinceLastRecordedDateWithSeconds:60*60*24];

データのクリア

SRGEventDateRecorder *eventRecorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];
[eventRecorder clear];

具体例

ある機能の利用をイベントとして扱う時、利用時にイベントを記録しておく

SRGEventDateRecorder *recorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];
[recorder record];

機能を使う時、初回だけ特別な動作をさせたいケース

SRGEventDateRecorder *recorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];
if( !recorder.didRecorded ){
    // 機能が1度も利用されてない時のみ実行したい処理を書く
}

機能を使う時、3回目までだけ特別な動作をさせたいケース

SRGEventDateRecorder *recorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];
if( recorder.recordedCount <= 3){
    // 3回目までだけ実行させたい処理
}

機能を使う時、前回利用から1日以上経過してる場合にだけ特別な動作をさせたいケース

SRGEventDateRecorder *recorder = [SRGEventDateRecorder recorderWithKey:@"use_my_awesome_feature"];
if( [recorder didElapsedSinceLastRecordedDateWithSeconds:60*60*24){
    // 前回利用から1日以上経過してるときにだけ実行したい処理
}

以上、SRGEventDateRecorderの紹介でした。
利用することで楽ができそうな画面があれば、使ってみてください。

77
76
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?