Файл iOS-хранилища в директории кеша для установленного промежутка времени - PullRequest
0 голосов
/ 05 февраля 2012

У нас есть приложение iPad для сдачи в аренду POS-квартир, которое используется для сбора большого количества данных о пользователе и его интересах (конечно, с его знаниями).

Мы используем RestKit для синхронизации CoreData с сервером,что очень мило.

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

Хотя это должны быть очень маленькие текстовые файлы, вероятно, около 1-3 КБ, я чувствую, что должен в конечном итоге удалить их из каталога кэша.(Когда я набираю это, может быть, оно настолько маленькое, что мне не о чем беспокоиться).

Мне было любопытно, есть ли способ очистить файлы из каталога кэша через определенное время?Скажи 90 дней или около того?

1 Ответ

3 голосов
/ 05 февраля 2012

Слово на улице заключается в том, что если вы используете санкционированное расположение NSCachesDirectory, если ОС требуется это место, оно удалит вещи, которые находятся в этом каталоге. Я на самом деле никогда не видел, чтобы это происходило на практике, но я слышал такие вещи (и это понятно), иначе зачем беспокоиться о специальном, разрешенном ОС расположении для файлов кэша.)

Тем не менее, это задание звучит довольно просто. Просто включите низкоприоритетный фоновый блок GCD, чтобы перебрать файлы в этом каталоге и удалить все, чья дата создания была> 90 дней назад. Это действительно легко, если вы заботитесь только о том, как давно были созданы данные (в отличие от того, когда вы в последний раз обращались к данным, которые сложнее определить, не отслеживая себя.) NSFileManager - ваш друг здесь. Как-то так должно работать:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    NSFileManager* fm = [NSFileManager defaultManager];
    NSMutableArray* urlsToDelete = [NSMutableArray array];
    for (NSURL* dirUrl in [fm URLsForDirectory: NSCachesDirectory inDomains:NSUserDomainMask])
    {
        NSDirectoryEnumerator* dirEnum = [fm enumeratorAtURL: dirUrl 
                                  includingPropertiesForKeys: [NSArray arrayWithObject: NSFileModificationDate]  
                                                     options: 0 
                                                errorHandler: ^(NSURL* a, NSError* b){ return (BOOL)YES; }];
        NSURL* url = nil;
        while ((url = [dirEnum nextObject]))
        {
            NSDate* modDate = [[dirEnum fileAttributes] objectForKey: NSFileModificationDate];
            if (modDate && [[NSDate date] compare: [modDate dateByAddingTimeInterval: 60 * 60 * 24 * 90]] == NSOrderedDescending)
            {
                [urlsToDelete addObject: url];
            }
        }                
    }

    for (NSURL* url in urlsToDelete)
    {
        [fm removeItemAtURL: url error: NULL];
    }
});

Чтобы уточнить, если вы ищете какой-то механизм, с помощью которого ОС может сказать: «удалите это, если я не получаю к нему доступ более 90 дней», и чтобы оно отслеживало это для вас, я не полагаю, что такой механизм существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...