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
を取得できませんでした。根底にあるものが問題だろうか?
あなたがロードしたときにいくつの 'Project'オブジェクトがある可能性がありますか? –
私はどれだけ多くの 'Project'を持っていてもそれは起こります。新しくインストールすると、 'Project'を1つ追加すると起こります。 – eirikvaa
1つのインスタンスでメモリの問題が発生した場合は、このコードに問題はありません。インストゥルメントを使用して、実際の問題点を見つけてください。 **特に** Realmと同じ問題を抱えているので、あなたの問題はほぼ確実にどこか他のところです。 –