2013-01-24 15 views
5

Meine App verfügt über eine Kerndaten-DB, die beim ersten Start für die Offline-Verwendung gefüllt wird. Diese Datenbank wird dann bei jedem Start mit einer Online-Datenbank synchronisiert. Nur der erste Start enthält eine erhebliche Menge an Daten. Die App ruft auch einige Bilder aus dem Internet ab, die dann in binäre Daten konvertiert und für die Offline-Nutzung in Kerndaten gespeichert werden. Dies geschieht nur, wenn der Benutzer zu einem Abschnitt navigiert, der einige Bilder enthält, und nur diese Bilder werden abgerufen (die App ruft nicht alle Bilder auf einmal ab, nur so, wie sie benötigt werden).Kerndaten "Nicht sichern" -Flag

I Magische Bilanz verwenden.

ich zur Laufzeit-Datei keine Art von Daten speichern. Allerdings meine App mit dieser Nachricht abgelehnt wurde:

Wir fanden, dass Ihre App nicht den iOS Data Storage-Richtlinien nicht folgen, die nach den App Store Richtlinien für Bewertungen erforderlich ist.

Es rät mir zu überprüfen "Einstellungen> iCloud> Storage & Backup> Speicher verwalten", aber meine App nicht einmal angezeigt.

Ich verstehe ich sollte Kerndaten markieren nicht zu iCloud bakcup, aber ich verstehe nicht, wie dies zu tun. Angeblich sollte ich so etwas implementieren, weiß aber nicht, wie ich es auf meine Kerndateien anwenden soll.

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { 
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); 

NSError *error = nil; 
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] 
           forKey: NSURLIsExcludedFromBackupKey error: &error]; 
if(!success){ 
    NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); 
} 
return success; } 

Antwort

1

Suche: NSPersistentStoreCoordinator+MagicalRecord.m

Dann finden:

- (NSPersistentStore *)MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options 

Am unteren Ende des Verfahrens werden Sie sehen:

if (!store) 
{ 
    [MagicalRecord handleErrors:error]; 
} 

Ändern Sie diesen an:

if (!store) 
{ 
    [MagicalRecord handleErrors:error]; 
} 
else 
{ 
    [self addSkipBackupAttributeToItemAtURL:url]; 
} 

Lassen Sie mich wissen, ob die Methode für Sie anders aussieht, aber das ist, was ich für meine eigene Implementierung verwende. Vergewissere dich, dass du die Funktion, die du in deiner Frage erwähnt hast, fallen lässt.

+1

Wenn MagicalRecord als Pod verwendet wird, würde dies keine Zeit bekommen überschrieben wir ein Update für dieses Pod ziehen? – Matt

2

kann Below besser sein als MacigalRecord Quelldateien zu ändern. In schnellen

MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreNamed("somedb.sqlite") 
let dbPath = NSPersistentStore.MR_urlForStoreName("somedb.sqlite") 
do { 
    try dbPath.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey) 
} catch let error { 
    print(error) 
} 
+0

Dies ist der Weg zu gehen. Für Ziel-C-Personen: 'NSURL * dbURL = [NSPersistentStore MR_urlForStoreName: @" Geschäftsname "]; NSError * Fehler = Null; BOOL Erfolg = [dbURL setResourceValue: [NSNumber numberWithBool: JA] forKey: NSURLIsExcludedFromBackupKey Fehler: & error]; ' – Richard

+0

Ich schlage vor, das gesamte Verzeichnis von der Sicherung auszuschließen, nicht nur die .sqlite. Andernfalls werden die Journal-DB-Dateien in die Sicherung einbezogen. Wenn ich mich recht erinnere, erstellt MagicalRecord standardmäßig ein Verzeichnis innerhalb der Anwendungsunterstützung, wo es alle Datenbanken speichert. So wohl besser eine Ebene auszuschließen oben wie folgt aus: 'lassen DBPATH = NSPersistentStore.MR_urlForStoreName (storeFileName) .URLByDeletingLastPathComponent' – Lubbo

+0

' wenn lassen DBPATH = NSPersistentStore.MR_urlForStoreName (storeFileName) .URLByDeletingLastPathComponent { do { versuchen dbPath.setResourceValue (NSNumber (bool: true), forKey: NSURLIsExcludedFromBackupKey) } catch let Fehler { print (Fehler) } } ' – Lubbo