2017-10-15 36 views
0

我有一个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作为应用程序的一个参数,但是这并没有给我任何腥意。

我已经添加了我的Core Data Stack类,因此您可以看到我如何设置它,尽管它非常标准。

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奇怪的是,域表现出类似的行为。它不会让我取Project s。也许潜在的问题是这个问题?

+0

当你加载它们时,你可能会拥有多少个'Project'对象? –

+0

无论我有多少个“项目”,都会发生这种情况。在全新安装时,它会在我添加一个“Project”时发生。 – eirikvaa

+0

如果您遇到单个实例的内存问题,那么这个代码不会有问题。使用仪器并找出真正的问题。 **特别是**因为你看到了与Realm相同的问题 - 你的问题几乎肯定是在其他地方。 –

回答

0

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

相关问题