-1

ユーザーが無料版をロードしたときに、アプリ内に特定の制限を含めることがどのように可能か疑問に思いました。例:約100個のエントリを持つtableViewがあります。プレミアムバージョンを購入しない限り、ユーザーはそのうちの10個をお気に入りに追加できますが、それ以上はお気に入りに追加できません。FavoritetableViewControllerのnumberOfRowsInSectionに「return10」を入れることを考えていました。または、これを行うためのより良い/より快適な方法はありますか?

解説機能もあります。したがって、ユーザーがコメントを見た場合、返信したい場合は、「回答」をクリックするだけで済みます。しかし、無料のユーザーの場合、そのやり取りを5つに制限したいので、1日に5つのコメントを書くことができます。ある種の内部時計を実装することを考えて遊んでいました。そして、ユーザーが「送信」をクリックするたびに、カウンターが上がります。そして、カウンターが5に達すると、ボタンが無効になります。そして、時計が24時間を過ぎた後、このカウントはリセットされます。しかし、正直なところ、私はまだそれを行う方法を知りません。したがって、アイデアや意見をいただければ幸いです。

4

1 に答える 1

1

それが最善の解決策であるかどうか、そしてあなたを助けるかどうかはわかりません。私にとってそれを行う方法は、シングルトンクラスを持つことです。アプリの起動時にBoolvarプレミアムで彼を初期化する必要があります。この時点で、必要なすべてのデータでクラスを初期化する必要があります:お気に入りの行の数、最終日のコメント、...。

すべての「プレミアム操作」の前に、次のような方法にアクセスする必要がありますBOOL authorized = [[AuthorizeSingleton sharedmanager] operation]。ここでは、彼がプレミアムアクションを実行できるかどうかを知るために必要なすべてのテストがあります。

誰かがプレミアムアクションを実行したいときはいつでも、viewControllerからこのシングルトンにアクセスする必要があります。戻り値がNOの場合はエラーメッセージを表示し、それ以外の場合はアクションを実行します。

ユーザーがプレミアムの場合は、常に「はい」を返します。

そのようなものをすばやくコーディング

ここで.h

#import <Foundation/Foundation.h>

@interface AuthorizeSingleton : NSObject
@property (strong, nonatomic) NSNumber* premium;
@end

ここで.m#importAuthorizedSingleton.h

AuthorizeSingleton* _sharedInstance=nil;

@interface AuthorizeSingleton ()

@property (strong, nonatomic) NSDate* timestamp;
@property (strong, nonatomic) NSNumber* numberOfcomentary;
@end

@implementation AuthorizeSingleton
@synthesize timestamp=_timestamp, numberOfcomentary=_numberOfcomentary;

-(id)init{
     if (self == [super init]) {
    //Here you should take data from your persistence(NSUSerDefaults or something like that) Here I initialize at 0
         _timestamp=[[NSDate alloc] init];
         _numberOfcomentary= [NSNumber numberWithInt:0];
    }

     return self;
}

+(AuthorizeSingleton*)sharedInstance{
    if (!_sharedInstance) {
        _sharedInstance = [[AuthorizeSingleton alloc] init];
    }

    return _sharedInstance;
}

-(BOOL)shouldDoComentary{
    NSDate* today= [[NSDate alloc] init];
    NSTimeInterval interval = [_timestamp timeIntervalSinceDate: today];

    if (interval>60*60*24) {
        _timestamp=today;
        _numberOfcomentary= [NSNumber numberWithInt:0];
    }

    if (_numberOfcomentary.integerValue>5 && !_premium.boolValue) {
        return NO;
    }

    return YES;
}

@end

私はそれをテストしませんが、それは考えです。次のような承認が必要な場所からクラスを呼び出します

BOOL auth = [[AuthorizedSingleton sharedInstance] shouldDoComentary]
if(!auth){
    //show error 
}
else{
     //do action
}
于 2012-08-24T15:55:44.830 に答える