На първо място използвам MagicalRecord, за да управлявам моятаОсновни данни. Така че сега слоят на базата данни работи чудесно и спестява промени всеки път, когато се случи промяната. Например: добавям нов запис към таблица и се записва в db файла, съхраняван на моя твърд диск веднага. Това, което искам да постигна, е да запазя всички промени в паметта и да ги напиша само на файла db върху "запазване" команда кликнете.
Разбрах, че обаждането, което прави файла с файла db, е:
[managedObjectContext MR_saveToPersistentStoreAndWait];
Както реших, мога да направя всичките си модификациибез да се обаждате на този метод, а след това върху "запазване" кликнете, обадете се на този метод. Въпреки това, той работи само ако нишката не се промени. Всеки път, нишката променя ManagedObjectContext, който се възстановява или пресъздава и губя всичките си данни.
EDIT: току-що намерен метод в Magical Record:
[NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore];
което ми е необходимо за първата част на моя проблем. Въпреки че не знам как да премина от този тип координатор към
[NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreNamed:objectModelName];
без да губят никакви данни.
Някой знае ли как да направи това правилно ?! Всякакъв вид помощ е наистина оценена!
Отговори:
0 за отговор № 1Проверете следните опции:
1- Има setupCoreDataStackWithInMemoryStore, което може да ви помогне, ако искате да стартирате всичко в паметта.
2-Можете да запишете във фонов режим:
[MagicalRecord saveInBackgroundWithBlock: ^ (NSManagedObjectContext * localContext) {
}];
3-За да получите контекста по подразбиране или този за нишката
[NSManagedObjectContext MR_defaultContext];
[NSManagedObjectContext MR_contextForCurrentThread];
0 за отговор № 2
Разбрах го, като извърша сериозни изследвания. Трябва да използвам
NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore];
за да мога данните ми да се "затварят", преди потребителят да кликне върху запишете, където правя следното:
// psc - my current persistentStoreCoordinator; urlForStore - place where I"m gonna store SQLite
[psc migratePersistentStore:[psc persistentStores][0] toURL:urlForStore options:nil withType:NSSQLiteStoreType error:&error];