Я просто попытался использовать основные данные, чтобы что-то сделать, моя цель - создать объект с дочерним контекстом, назначить значения для объекта и затем сохранить его на хранение после выполнения некоторых операций ,Ошибка CoreData на устройстве, но прекрасная на симуляторе
Он отлично работает на симуляторе, но при работе на устройстве произошла ошибка.
Это ошибка:
CoreData: error: Mutating a managed object 0x174033540 (0x1740cb600) after it has been removed from its context.
мой код:
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)");
}
}
}
Не уверен, что я понимаю ваш ответ или почему это работает. –
вам это не нужно, если вы использовали MagicalRecord 3.0 – PatrickSCLin