それが最善の解決策であるかどうか、そしてあなたを助けるかどうかはわかりません。私にとってそれを行う方法は、シングルトンクラスを持つことです。アプリの起動時に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
}