Что вы должны сделать, это поместить код доступа к БД области в общую среду, к которой вы могли бы получить доступ из расширения, не забудьте объявить ваш контейнер таким образом
let container = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.a.b")
[ 114], но вы должны синхронизировать свою БД из расширения, это известная ошибка: https://github.com/realm/realm-cocoa/issues/4490
На сайте интенсивного движения как Переполнение стека я только обновил бы "последнюю замеченную" переменную, когда пользователь на самом деле делает что-то. Скрывание вокруг и чтение вопросов и ответов не должны рассчитывать как пользователь, "замечаемый" системой. Выяснение и ответ на вопросы или голосование по ним должны быть действиями, которые обновляют, когда пользователь в последний раз замечен.
Я не буду говорить о деталях реализации, потому что это уже охвачено другими ответами (и я, вероятно, понял бы его превратно).
Рассмотрите использование шаблона разработки "Команды" для этого. Это поможет Вам, два пути - отвечают на вопрос под рукой и также реализуют опцию "отмены/восстановления". Необходимо вести список объектов команды, разработанных на тот шаблон.
Вы, вероятно, найдете, "Какая стратегия Вы использовали бы для отслеживания пользователя недавнее действие?" чтобы быть полезным. Проблемы подобны.
Я использовал бы СЕССИЮ. И только набор это первое посещение сессии. Также сбрасывая его каждый час или так для того, если люди оставляют браузер открытым. В php что-то вроде этого:
if(!isset(!_SESSION['lastSeen'])){
$_SESSION['lastSeen'] = time();
updateLastSeenInDatabaseOrSomething();
}
else{
if($_SESSION['lastSeen'] < time() + 2 * 60 * 60){ //2 hours
$_SESSION['lastSeen'] = time();
updateLastSeenInDatabaseOrSomething();
}
}
Что-то как этот, но затем с OO и не выполнением того же самого дважды.