У меня есть приложение React Native, которое использует React Native Video с iOS кэшированием . Я работал над методом внутри RCTVideoCache.m , который вручную удалял бы данные определенного ключа кэша. Согласно документации SPTPersistentCache, которую видеотека использует для кэширования, данные могут быть удалены либо блокировкой / разблокировкой файла и , вызвав стирание , либо после проверки исходного кода SPTPersistentCache.h
с методом с именем removeDataForKeys .
Я пробовал оба пути, но безуспешно.
В моя первая попытка , я использую wipeLockedFiles . Я создал deleteFromCache()
метод внутри RCTVideoCache.m . Поскольку все мои видеофайлы по умолчанию разблокированы, в этом методе я пытаюсь заблокировать файл, соответствующий моим cacheKey
и , вызывать стирание для всех заблокированных файлов (которое будет состоять только из моей цели * 1026). * файл), как это продемонстрировано в документации. Этот метод выглядит следующим образом:
- (void)deleteFromCache:(NSString *)cacheKey withCallback:(void(^)(BOOL))handler;
{
[self.videoCache lockDataForKeys:@[cacheKey] callback:nil queue:nil];
[self.videoCache wipeLockedFiles];
NSLog(@"Size = %@", @(self.videoCache.totalUsedSizeInBytes));
handler(YES);
}
Следующие ошибки приводят к двум ошибкам при компиляции:
/Users/.../MyApp/node_modules/react-native-video/ios/VideoCaching/RCTVideoCache.m:79:20: error: no visible @interface for 'SPTPersistentCache' declares the selector 'lockDataForKeys:callback:queue:'
[self.videoCache lockDataForKeys:@[cacheKey] callback:nil queue:nil];
~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/.../MyApp/node_modules/react-native-video/ios/VideoCaching/RCTVideoCache.m:80:20: error: no visible @interface for 'SPTPersistentCache' declares the selector 'wipeLockedFiles'
[self.videoCache wipeLockedFiles];
~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~
Я действительно понятия не имею, почему эти селекторы не видны из SPTPersistentCache
.
В моя вторая попытка , я использую removeDataForKeys () . Опять же, я создал deleteFromCache()
метод внутри RCTVideoCache.m , который выглядит следующим образом:
- (void)deleteFromCache:(NSString *)cacheKey withCallback:(void(^)(BOOL))handler;
{
[self.videoCache removeDataForKeys:@[cacheKey] callback:^(SPTPersistentCacheResponse * _Nonnull response) {
NSLog(@"Result output: %@", response.output);
NSLog(@"Error output: %@", [response.error localizedDescription]);
} onQueue:dispatch_get_main_queue()];
NSLog(@"Size = %@", @(self.videoCache.totalUsedSizeInBytes));
handler(YES);
}
В этом втором способе нет ошибок, однако данные Ключ никогда не удаляется. Кроме того, оба NSLog
s для ответного выхода null
внутри терминала.
Я на 100% уверен, что cacheKey
, который я предоставляю моему методу deleteFromCache()
, верен и данные, соответствующие ему, существуют. Однако в обоих методах NSLog(@"Size = %@", @(self.videoCache.totalUsedSizeInBytes));
не изменяется, и я также могу вручную проверить, что файл не был удален.
Я действительно застрял и не знаю, что не так с кодом, который я написал в обоих случаях, и почему ни один из них не работает. Буду признателен за любую помощь в этом!