2014-10-28 18 views

cevap

1

Bu iki yöntemi çok yardımcı buldum. Paylaşılan uygulama grubunuz olmak için #define g_groupName numaralı telefonu kullanmalısınız. CachesDirectory, uygulamaya özgü önbellek klasörüne geri dönmeden önce paylaşılan uygulama grubu önbellekleri klasörünü seçecektir. CachesDirectoryLocal her zaman uygulamaya özel önbellekler klasörünü döndürür. Bu yardımcı olur umarım!

#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; 
} 
İlgili konular