如何在免费/高级应用程序中包含限制?

时间:2012-08-24 15:25:12

标签: ios xcode tableview restrictions

当用户加载免费版本时,我想知道如何在应用程序中包含某些限制。 例如:我有一个包含大约100个条目的tableView。除非用户购买高级版本,否则用户可以收藏其中的10个,但不能更多!我想在FavoritetableViewController上的numberOfRowsInSection中添加“return 10”。或者有更好/更舒适的方法吗?

还有一个评论功能。因此,如果用户看到评论,他/她想要回复,他/她只需要点击“回答”。但对于免费用户,我想将这种互动限制为5。 所以他们每天可以写5条评论。我正在玩实现某种内部时钟的想法。每当用户点击“提交”时,计数器就会上升。当计数器达到5时,按钮被禁用。时钟过去24小时后,此计数将重置。但说实话,我还不知道该怎么做。 所以任何想法或意见都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我不知道这是否是最好的解决方案,如果能帮到你的话。对我来说,做到这一点的方法是有一个单例类。您应该在应用程序启动时使用Bool var premium初始化他。此时你应该用你需要的所有数据初始化类:最喜欢的行数,最后一天的评论,....

在每次“高级操作”之前,您应该访问以下方法:BOOL authorized = [[AuthorizeSingleton sharedmanager] operation]。在这里,您需要进行所有测试,以了解他是否可以执行高级操作。

每次有人想要执行高级操作时,您应该从viewController访问此单例。如果返回为NO,则弹出错误消息,在另一种情况下,您执行操作。

如果用户是高级用户,则始终返回是。

快速编码

这里是.h

#import <Foundation/Foundation.h>

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

这里是.m     #import AuthorizedSingleton.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
}