このエラーが発生しているようです。[NSDecimalNumber retain]:解放されたインスタンス0x174222220にメッセージが送信されましたが、なぜですか?
*** -[NSDecimalNumber retain]: message sent to deallocated instance 0x174222220
私はアプリを初めて実行すると、コードが細かい実行されますが、私は戻ってそのVCになった場合は、上記のメッセージでアプリがクラッシュします。私はいくつかの研究を行いました。NSDecimalがどのようにリリースされているのかということを意味していると思います。非常に奇妙です.3つの小数点以下の桁がすべて同じ方法で設定されています。
小数はCore Dataに格納されていて、cellForIndexAtメソッドの側でVC内のラベルに設定されています。
print("\(historyEntry.newAmount) new amount")
初めて正確な金額を返す。しかし、2回目、または私がテーブルビューを移動しようとすると、上記のメッセージでアプリがクラッシュします。何が小数点自体を解放する原因になりますか?
EDIT
私はCoreDataStack迅速なファイルを持っているとmanagedContextは次のように作成されている:私はこのようなオブジェクトを取得しています
lazy var managedContext: NSManagedObjectContext = {
return self.storeContainer.viewContext
}()
:
// load the data
let fetchRequest: NSFetchRequest<Statement> = Statement.fetchRequest()
fetchRequest.predicate = NSPredicate(format:"person.name == %@ AND amountOwed >= 0", personName)
let sort = NSSortDescriptor(key: #keyPath(Statement.amountOwed), ascending: true)
fetchRequest.sortDescriptors = [sort]
positiveFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: coreDataStack.managedContext, sectionNameKeyPath: nil, cacheName: nil)
do{
try positiveFetchedResultsController.performFetch()
}catch let error as NSError{
print("Fetching error: \(error), \(error.userInfo)")
}
positiveFetchedResultsController.delegate = self
私は思います私が使用しているフェッチされたオブジェクトを別のViewControllerに渡し、次のようにそのプロパティにアクセスしてください:
print("\(historyEntry.changeAmount) change amount") // gives me back the correct amount that was saved evrytime.
この属性は、しかし、ここで
print("\(historyEntry.newAmount) new amount") // first time correct, after that error message from above.
EDIT
初めてCoreDataStackクラスは
あるimport Foundation
import CoreData
class CoreDataStack {
private let modelName: String
init(modelName: String) {
self.modelName = modelName
}
lazy var managedContext: NSManagedObjectContext = {
return self.storeContainer.viewContext
}()
private lazy var storeContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: self.modelName)
container.loadPersistentStores { (storeDescription, error) in
if let error = error as NSError? {
print("Unresolved error \(error), \(error.userInfo)")
}
}
return container
}()
func saveContext() {
guard managedContext.hasChanges else { return }
do {
try managedContext.save()
} catch {
let nserror = error as NSError
print("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
例外的なブレークポイントを設定して、 –
を参照してください。例外的なブレークポイント – icekomo
を割り振り解除されたインスタンスに送信する方法を知っているかどうか分かりません。なぜあなたのアプリがクラッシュするのですか –