2012-05-30 8 views
6

Ho un app che scarica una tonnellata di foto e li memorizza in una sottocartella della cartella Documenti, che era apparentemente bene fino a quando iOS 5.1App respinta a causa dell'archiviazione dei dati: come faccio a ignorare tutti i miei file in una cartella?

ora Apple mi sta dicendo che ho bisogno di memorizzarli altrove o in qualche modo contrassegnarli come non per il backup. Questo è un aggiornamento dell'app, quindi per la maggior parte dei miei utenti i dati saranno già presenti in queste sottocartelle.

Come posso ottenere iOS per saltare tutti i file nelle mie sottocartelle di Documenti o saltare un particolare file nella cartella Documenti?

Sarebbe un'impresa ENORME spostare tutti i file nella cache come suggeriscono.

ho letto questo, ma io non sono sicuro esattamente dove sto supponiamo di implementare questa: https://developer.apple.com/library/ios/#qa/qa1719/_index.html

+0

Come ci sono un paio di 'moveItemAtURL: toURL: errore:' chiamate che si muovono i file esistenti nella directory di cache un'impresa enorme? C'è un'alta probabilità che non si possa evitare di farlo comunque, perché il flag di non-backup non funziona su iOS 5.0 –

risposta

5

È possibile utilizzare NSFileNanager per elencare tutti i file, quindi chiamare la funzione che viene suggerito nel vostro simile. Il tuo codice sarebbe qualcosa di simile:

// 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]; 
    } 
} 

e li si utilizzerà questo genere:

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

Basta applicare l'addSkipBackuopAttribute alla cartella stessa per impedire che qualsiasi cosa all'interno di quella cartella sia salvata così no bisogno del secondo metodo – Slee

+0

Una domanda. Siamo bloccati come te con il marchio "non fare il backup". E sto vedendo che hai utilizzato in iOS 5.1 il metodo descritto da Apple per l'utilizzo in iOS 5.0.1, giusto? Perché, io non possiamo lavorare sul metodo che Apple dice che dobbiamo usare in iOS 5.1. I file non vengono contrassegnati, ma se usiamo il metodo descritto per essere utilizzato in iOS 5.0.1 i file sono ben marcati. Ma .... Apple dice che il metodo è deprecato. Come l'hai risolto? – FreelanceAr

Problemi correlati