HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – CoreData在设备上发生错误但在模拟器上很好大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是尝试使用核心数据来做某事,我的目标是创建一个带有子上下文的对象,为对象分配值,然后在执行某些操作后将其保存到存储中.

它在模拟器上工作正常,但在设备上运行时发生错误.

这是错误

我的代码

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;
    }
}

视图控制器

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)");
        }
    }
}

解决方法

解决了这个问题,

我没有保留子上下文,因为Swift@L_262_6@类变量,

只需在文件上设置managedContext.

let managedContext = NsmanagedObjectContext.MR_context();

extension NsmanagedObject {

    class func GV_New() -> NsmanagedObject {

        return self.MR_createInContext(managedContext) as NsmanagedObject;

    }

    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 {

                object.managedObjectContext?.MR_saveOnlySelfAndWait();

                NsmanagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait();

                result = true;

            }

        }

        return result;

    }

}

大佬总结

以上是大佬教程为你收集整理的ios – CoreData在设备上发生错误但在模拟器上很好全部内容,希望文章能够帮你解决ios – CoreData在设备上发生错误但在模拟器上很好所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。