2017-10-15 12 views
0

Core Dataが何ヶ月も働いていたiOSアプリケーションがあり、High Sierra、Xcode 9/Swift 4、iOS 11にアップグレードした後動作を停止。私は毎日それがサイドプロジェクトなので、毎日仕事をしないので、いつ仕事が止まったのか正確には特定できません。コアデータオブジェクトをフェッチするときにメモリが使用されるため、アプリケーションがフリーズして終了する

私のアプリケーションが起動すると、Projectオブジェクト(Core Dataモデルの一部)が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を取得できませんでした。根底にあるものが問題だろうか?

+0

あなたがロードしたときにいくつの 'Project'オブジェクトがある可能性がありますか? –

+0

私はどれだけ多くの 'Project'を持っていてもそれは起こります。新しくインストールすると、 'Project'を1つ追加すると起こります。 – eirikvaa

+0

1つのインスタンスでメモリの問題が発生した場合は、このコードに問題はありません。インストゥルメントを使用して、実際の問題点を見つけてください。 **特に** Realmと同じ問題を抱えているので、あなたの問題はほぼ確実にどこか他のところです。 –

答えて

0

まあ、それは私のデバイスのクリーンインストールを行うことで修正されたようです。私はまだエラーが発生した理由を発見していないが、とにかく、それは修正です。