在获取Core Data对象时,应用程序因内存使用而冻结和终止

时间:2017-10-15 20:00:34

标签: ios swift core-data realm

我有一个iOS应用程序,其中Core Data已经工作了几个月,在我升级到High Sierra,Xcode 9 / Swift 4和iOS 11之后的某个时刻,它停止了工作。我不是每天工作,因为它是一个侧面项目,所以我无法确切地指出它何时停止工作。

当我的应用程序启动时,我会在Project中获取所有viewDidLoad个对象(我的核心数据模型的一部分),并将它们放在我的视图控制器中的projects属性中。我使用以下方法获取

func fetchProjects() -> [Project] {
    let fetchRequest = Project.fetchRequest() as! NSFetchRequest<Project>
    var projects: [Project] = []

    do {
        projects = try coreDataStack.viewContext.fetch(fetchRequest)
    } catch {
        print(error.localizedDescription)
    }

    return projects
}

问题是,应用程序只是白色并开始占用设备的内存,然后退出时只显示来自调试器的消息:由于内存问题而终止。如果我删除对此方法的调用,则启动就好了。

我将应用程序上传到TestFlight,一位朋友说它工作正常,所以最有可能是我的问题,但我不知道是什么。

更新1 做仪器的问题是,仪器核心数据仅适用于模拟器,我的问题仅在我的设备上运行时出现。但是,当我在模拟器上运行它时,我没有看到任何我认为是错误的内容。

我尝试将-com.apple.CoreData.SQLDebug 1设置为应用程序的参数,但这也不会给我带来任何可疑之处。

我已经添加了我的核心数据堆栈类,因此您可以看到我如何设置它,尽管它非常标准。

final class CoreDataStack {

    // MARK: Properties
    static let sharedInstance = CoreDataStack()

    lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: Strings.CoreData.modelName)
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    lazy var viewContext: NSManagedObjectContext = {
        return self.persistentContainer.viewContext
    }()

    // MARK: Initialization
    private init() {
    }

    // MARK: - Saving
    func saveContext() {
        guard persistentContainer.viewContext.hasChanges else {
            return
        }

        do {
            try persistentContainer.viewContext.save()
        } catch let error as NSError {
            print("Unresolved error \(error), \(error.userInfo)")
        }
    }
}

更新2 奇怪的是,Realm表现出类似的行为。它不会让我获取Project。也许潜在的问题是什么?

1 个答案:

答案 0 :(得分:0)

好吧,似乎我通过干净安装我的设备来修复它。我还没有发现错误发生的原因,但无论如何,这是解决方法。