Tôi đã tìm thấy hai phương pháp này rất hữu ích. Bạn phải #define g_groupName
làm nhóm ứng dụng được chia sẻ của mình. CachesDirectory
sẽ chọn nhóm ứng dụng chia sẻ lưu trữ thư mục đầu tiên trước khi quay trở lại thư mục cache cụ thể của ứng dụng. CachesDirectoryLocal
luôn trả về thư mục cache của ứng dụng cụ thể. Hi vọng điêu nay co ich!
#define g_groupName @"group.com.yourdomain.yourapp"
#define DISPATCH_ONCE(var, code) static dispatch_once_t onceToken; var dispatch_once(&onceToken, ^{ code });
#define FILE_MANAGER ([[NSFileManager alloc] init])
NSString* CachesDirectory()
{
DISPATCH_ONCE(static NSString* s_cacheFolderForGroup = nil;,
{
if (g_groupName.length != 0)
{
s_cacheFolderForGroup = [FILE_MANAGER containerURLForSecurityApplicationGroupIdentifier:g_groupName].path;
s_cacheFolderForGroup = [s_cacheFolderForGroup stringByAppendingPathComponent:@"Library/Caches/"];
[FILE_MANAGER createDirectoryAtPath:s_cacheFolderForGroup withIntermediateDirectories:YES attributes:nil error:nil];
}
});
if (s_cacheFolderForGroup.length != 0)
{
return s_cacheFolderForGroup;
}
return CachesDirectoryLocal();
}
NSString* CachesDirectoryLocal()
{
DISPATCH_ONCE(static NSString* s_cacheFolder = nil;,
{
NSArray* docDirs = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
if (docDirs.count != 0 && [[docDirs objectAtIndex:0] isKindOfClass:NSString.class])
{
s_cacheFolder = (NSString*)[docDirs objectAtIndex:0];
if (![s_cacheFolder hasSuffix:@"/"])
{
s_cacheFolder = [s_cacheFolder stringByAppendingString:@"/"];
}
}
else
{
s_cacheFolder = @"./Library/Caches/";
}
});
return s_cacheFolder;
}