0

как я могу управлять временным сохраненным CoreData? как только я сделать что-то вроде этого:избавиться от временно сохраненных managedObjectContext

var myClass: MyClass = NSEntityDescription.insertNewObjectForEntityForName("MyClass", inManagedObjectContext: (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!) as MyClass 

это является частью моей managedObjectContext и будут сохранены, когда я сделать context.save(nil) Есть ли способ, чтобы получить объект NSManagedObject класса без баловаться с моим током контекст. Другими словами: Я хочу иметь необязательные объекты, которые просто не используются, когда я не сохраняю их явно, и я хочу иметь объекты, которые я действительно хочу сохранить настойчиво.

ответ

2

Нет прямого способа, чтобы вы могли избавиться от обновленного объекта, что вы можете сделать, это обновить его снова с помощью реальных данных (которые являются предыдущими данными перед обновлением). всякий раз, когда вы обновляете объект «NSManagedObject» (объект сущности данных ядра), «NSManagedObjectContext» фиксирует все изменения и сохраняет его, когда вы сохраняете контекст.

В этом типе использования лучше использовать базу данных Sqlite.

+0

Спасибо за ваш ответ! что вы имеете в виду, «обновляя его снова реальными данными»? – iVentis

+0

не сохраняйте контекст, когда вы не хотите сохранять данные, но все же, если хотите сохранить контекст, потому что вы могли создать новую сущность. Но прежде чем сохранять контекст, обновите обновленный объект с исходными данными (это реальные данные) , –

+0

Но как мне обновить объект? И какой предмет вы имеете в виду? – iVentis

0

Вы можете удалить объекты из управляемого контекста, прежде чем вы вызываете context.save, что предотвращает их передачу. Предполагая, что у вас есть NSManagedObjectContext называется context и экземпляром MyClass называется myClass, то следующий будет работать:

context.deleteObject(myClass)

См:

NSManagedObjectContext.deleteObject

Обсуждение

, Если объект еще не сохранен в постоянном хранилище, он просто удаляется из получателя.

Конечно, решение о том, какие объекты сохранять и отбрасывать, зависит от логики вашего приложения. Поэтому перед вызовом save вам нужно проверить все вставленные, но еще не завершенные экземпляры, зарегистрированные в NSManagedObjectContext, который вы используете. Вы можете следить за того, что в вашем приложении, или, возможно, это будет полезно:

NSManagedObjectContext.insertedObjects

Множество объектов, которые были вставлены в трубку, но еще не сохранены в постоянной памяти. (только для чтения)

1

Этот ответ опоздал, но, надеюсь, поможет кому-то другому. Да, есть. Вы создаете дочерний контекст. Делайте все, что хотите. Если вы хотите сохранить свои изменения, сохраните дочерний контекст - который НЕ хранит данные. Он уведомляет родительский контекст изменений, изменения теперь находятся в вашем основном контексте. Затем вы можете выполнить сохранение в основном контексте.

let childContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType) 
    childContext.parentContext = mainContext 
    guard let myClass = NSEntityDescription.insertNewObjectForEntityForName("MyClass", inManagedObjectContext: childContext) as? MyClass else { 
     // something went wrong, handle it here 
     return 
    } 
    // do your thing here 

, чтобы основной контекст знать, что вы хотите сохранить ваши изменения:

do { 
     try childContext.save() // does not persist anything, just lets know the parent that we are happy with the changes 
    } catch { 
     // handle error 
    } 

, когда вы хотите, чтобы НЕ сохранить изменения вы можете сбросить:

childContext.reset() 

когда вы хотите чтобы сохранить изменения в основном контексте, который вы делаете, как всегда:

do { 
     try mainContext.save() 
    } catch { 
     // handle error 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^