【问题标题】:newsstand memory storage issue, how do i get the app cache directory?报亭内存存储问题,如何获取应用缓存目录?
【发布时间】:2014-04-22 16:11:08
【问题描述】:

我有一个报亭应用程序,其中包含杂志并使用报亭框架。我意识到删除杂志和/或下载杂志时出了点问题,因为当我访问设置/使用时,我的应用程序在下载和删除同一杂志时内存使用量不断增长。 发现问题...在委托方法中下载问题时:

-(void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL

我只需要在最后添加类似这样的内容:

NSError *error;
[[NSFileManager defaultManager] removeItemAtPath:[destinationURL path] error:&error];
if (error){
    NSLog(@"ERROR:%@", error);
}

即使目录被称为“缓存”,您也需要手动删除。好的问题解决了,但是那些已经下载了我的应用程序并且在缓存目录中有大量 MB 的客户呢?

我想知道如何获取此目录并在启动时删除其中的所有内容,并且只删除一次... 我只能使用NSUserdefault 执行一次,但是如何获取此目录并删除其中的任何 zip 文件...此目录和其中的文件的示例是:

/private/var/mobile/Applications/1291CC20-C55F-48F6-86B6-B0909F887C58/Library/Caches/bgdl-280-6e4e063c922d1f58.zip

但此路径因设备而异。我想在发布时执行此操作,因此我确定没有正在进行的下载,但欢迎任何其他解决方案,提前致谢。

【问题讨论】:

    标签: ios caching storage nsfilemanager newsstand-kit


    【解决方案1】:

    您需要做的就是枚举 Caches 目录中的所有文件并删除具有 zip 扩展名的文件:

    - (void)removeZipFilesFromCachesDirectory {
        static NSString *const kZIPExtension = @"zip";
    
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
        NSError *error = nil;
        NSArray *fileNames = [fileManager contentsOfDirectoryAtPath:cachesDirectoryPath error:&error];
        if (error == nil) {
            for (NSString *fileName in fileNames) {
                NSString *filePath = [cachesDirectoryPath stringByAppendingPathComponent:fileName];
                if ([filePath.pathExtension.lowercaseString isEqualToString:kZIPExtension]) {
                    NSError *anError = nil;
                    [fileManager removeItemAtPath:filePath error:&anError];
                    if (anError != nil) {
                        NSLog(@"%@", anError);
                    }
                }
            }
        } else {
            NSLog(@"%@", error);
        }
    }
    

    【讨论】:

    • 似乎很有希望。在我对其进行测试后,如果它有效,您将获得奖励;)
    • 谢谢兄弟,完美无瑕。我会尽快奖励赏金。但是我仍然有 100 MB 的使用量(设置/使用/myapp),并且我在调试时检查了缓存目录中的文件大小都小于 1MB。任何想法可能是什么?核心数据可能(我保存图像的 NSData)?但在全新安装中,使用量约为 40 MB(在 sqlite 中使用相同的数据)
    • @user2387149 你能在模拟器中运行应用程序吗?在这种情况下,您可以看到所有与应用程序相关的目录及其内容。此外,某些数据可能存储在 Documents 目录中,而不仅仅是 Caches。
    • 我想到了,但由于这个错误,我无法在模拟器中运行它:ld: symbol(s) not found for architecture i386 "_OBJC_CLASS_$_CATiledLayer",引用自:objc- TiledPDFView.o 中的类引用:/
    • @user2387149 似乎您使用的 lib 不是为 i386(模拟器)架构编译的。尝试在 google 中找到 i386 的这个库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2011-09-24
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多