I was just trying to use the main data for something, my goal is to create an object with a child context, assign values ββto the object, and then save it after some operations.
It works fine on the simulator, but an error occurred on startup on the device.
This is mistake:
CoreData: error: Mutation of the managed object 0x174033540 (0x1740cb600) after it has been removed from the context.
my code is:
Extestion
extension NSManagedObject {
class func GV_New() -> NSManagedObject {
let entity = self.MR_entityDescription();
let parentContext = NSManagedObjectContext.MR_defaultContext();
let childContext = NSManagedObjectContext.MR_contextWithParent(parentContext);
let managedObject = NSManagedObject(entity: entity, insertIntoManagedObjectContext: childContext);
return managedObject;
}
class func GV_Insert(object: NSManagedObject) -> Bool {
var result: Bool = false;
let keyPath = "userInfo.primaryKey";
let primaryKey = self.MR_entityDescription().valueForKeyPath(keyPath) as String!;
if primaryKey != nil {
if (self.MR_findFirstByAttribute(primaryKey, withValue: object.valueForKey(primaryKey)) != nil) {
result = false;
} else {
let managedObjectId = object.objectID;
let managedObjectContext = object.managedObjectContext;
let managedObject = managedObjectContext!.existingObjectWithID(managedObjectId, error: nil);
managedObject?.managedObjectContext?.MR_saveOnlySelfAndWait();
NSManagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait();
result = true;
}
}
return result;
}
}
ViewController
class ViewController: UIViewController {
var camera: Camera!;
override func viewDidLoad() {
super.viewDidLoad();
println("\(Camera.MR_countOfEntities())");
camera = Camera.GV_New() as Camera;
camera.camera_id = 4567;
Camera.GV_Insert(camera);
println("\(Camera.MR_countOfEntities())");
for (index, value) in enumerate(Camera.MR_findAll()) {
let result = value as Camera;
println("result: \(value.camera_id)");
}
}
}
source
share