2014-10-28 14 views

risposta

1

Ho trovato questi due metodi molto utili. Devi definire #define g_groupName come gruppo di app condiviso. CachesDirectory sceglierà la cartella cache di gruppi di app condivisa prima di tornare alla cartella delle cache specifiche dell'app. CachesDirectoryLocal restituisce sempre la cartella delle cache specifiche dell'app. Spero che questo ti aiuti!

#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; 
} 
Problemi correlati