2013-08-02 2 views
-1

У меня есть приложение iOS с примерно 50 видами. Я хочу выполнить некоторую операцию после каждого 5-го экрана, который посещает пользователь. Я знаю, что могу создать своего рода глобальную переменную счетчика и обновить ее в viewDidLoad каждого представления, а если count равен 5, выполните эту операцию и сбросьте эту переменную счетчика. Есть ли лучший, более эффективный способ сделать это? Также, смотря вперед, если мне нужно что-то изменить, я предпочел бы сделать это в одном файле, чем все мои взгляды. Понравилось бы какое-то влияние на это.Эффективный способ подсчета просмотров посещений в приложении iOS

+0

Views, или просмотреть контроллеры? Если это контроллеры просмотра, используете ли вы навигационный контроллер и нажимаете сегу? Все ли они происходят из одного класса контроллера вида (например, 'UIViewController')? –

+0

Я использую xibs, а не раскадровку. Да, я имел в виду контроллеры представления, и все они происходят из UIViewController. Благодарю. –

ответ

1

Я бы создал одноэлементный класс, чтобы отслеживать вашу логику счетчика, создать базовый класс для всех ваших контроллеров представлений, а затем сделать свой вызов для счетчика singleton в viewDidLoad вашего базового класса.

Я думаю, что что-то подобное будет работать для вас:

@interface ViewCountManager() 

@property(nonatomic) NSInteger viewCount; 

@end 

@implementation ViewCountManager 

#define kOperateOnCount 5 
+(ViewCountManager *)viewCountManager 
{ 
    static ViewCountManager *viewCountManager = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     viewCountManager = [[self alloc] init]; 
    }); 
    return viewCountManager; 
} 

-(BOOL)shouldPerformOperation 
{ 
    BOOL retValue = NO; 
if(self.viewCount == kOperateOnCount - 1) 
    { 
     retValue = YES; 
     self.viewCount = 0; 
    } 
    else 
    { 
     self.viewCount++; 
    } 
    return retValue; 
} 

@end 


@implementation CountedViewController 

-(void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 
    BOOL shouldPerform = [[ViewCountManager viewCountManager] shouldPerformOperation]; 
    [self performOperation]; 
} 


@end 
Смежные вопросы