2012-05-30 11 views
6

Tengo una aplicación que descarga una tonelada de fotos y las almacena en una subcarpeta de la carpeta Documentos que aparentemente estaba bien hasta iOS 5.1Aplicación rechazada por almacenamiento de datos: ¿cómo puedo ignorar todos mis archivos en una carpeta?

Ahora Apple me dice que necesito almacenarlas en otro lugar o de alguna manera marcarlas como no para copia de seguridad Esta es una actualización de la aplicación, por lo que para la mayoría de mis usuarios, los datos ya existirán en estas subcarpetas.

¿Cómo hago para que iOS salte todos los archivos en mis subcarpetas de Documentos u omita un archivo en particular en la carpeta Documentos?

Sería una GRAN empresa mover todos los archivos al caché como sugieren.

leí esto, pero no soy seguro exactamente donde estoy supone que debe poner en práctica esta: https://developer.apple.com/library/ios/#qa/qa1719/_index.html

+0

Cómo hay un par de 'moveItemAtURL: toURL: error:' llamadas que se mueven los archivos existentes en el directorio cachés una gran empresa? Existe una alta probabilidad de que no pueda evitar hacer eso de todos modos, porque el do-not-backup-flag no funciona en iOS 5.0 –

Respuesta

5

Usted puede utilizar NSFileNanager para listar todos los archivos, a continuación, llamar a la función que se sugiere en su estilo. El código sería algo así como:

// From Apple FAQ 
#import <sys/xattr.h> 
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); 

    const char* filePath = [[URL path] fileSystemRepresentation]; 

    const char* attrName = "com.apple.MobileBackup"; 
    u_int8_t attrValue = 1; 

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    return result == 0; 
} 


- (void) addSkipBackupAttributeToItemsInFolder:(NSString*)folder 
{ 
    NSFileManager *fm = [NSFileManager defaultManager]; 
    NSArray *dirContents = [fm contentsOfDirectoryAtPath:folder error:nil]; 

    for (int curFileIdx = 0; curFileIdx < [dirContents count]; ++curFileIdx) 
    { 
     NSString* curString = [folder stringByAppendingPathComponent:[dirContents objectAtIndex:curFileIdx]]; 
     NSURL* curFileUrl = [NSURL fileURLWithPath:curString]; 
     [self addSkipBackupAttributeToItemAtURL: curFileUrl]; 
    } 
} 

Y que va a utilizar esto como que:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    [self addSkipBackupAttributeToItemsInFolder:documentsDirectory]; 
+1

Solo con aplicar el addSkipBackuopAttribute a la carpeta, se evitó que cualquier cosa dentro de esa carpeta se copiara necesidad del segundo método. – Slee

+0

Una pregunta. Estamos atrapados como usted con la marca "do not backup". Y veo que has usado en iOS 5.1 el método descrito por Apple para usar en iOS 5.0.1, ¿verdad? Porque no puedo poner en práctica el método que Apple dice que debemos usar en iOS 5.1. Los archivos no están siendo marcados, pero si usamos el método descrito para ser utilizado en iOS 5.0.1, los archivos están bien marcados. Pero ... Apple dice que el método está en desuso. ¿Cómo lo resolvió? – FreelanceAr

Cuestiones relacionadas