2014-10-28 17 views
6

Có cách nào thích hợp để truy cập vào NSCachesDirectory trong thư mục dùng chung cho ứng dụng vùng chứa và phần mở rộng của nó không?Cách truy cập thư mục NSCachesDirectory trong thư mục chia sẻ nhóm?

NSURL *sharedDirectory = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:APPS_GROUP_NAME]; 

Cách nào đúng để có được "/Library/Caches/" sau này?

Trả lời

1

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; 
} 
Các vấn đề liên quan