我似乎得到這個錯誤。[NSDecimalNumber retain]:發送到釋放實例0x174222220的消息,但是爲什麼?
*** -[NSDecimalNumber retain]: message sent to deallocated instance 0x174222220
我第一次運行應用程序,代碼執行罰款,但如果我回到那個VC,應用程序崩潰與上述消息。我做了一些研究,我認爲這意味着一些NSDecimal如何發佈。這很奇怪,因爲我有3個其他小數點全部設置完全相同的方式工作。
的小數被存儲在覈心數據,然後被設置到一個標籤在我側VC的cellForIndexAt方法。
print("\(historyEntry.newAmount) new amount")
我第一次找回正確的金額。但第二次,或者如果我嘗試移動tableview應用程序與上面的消息崩潰。什麼會導致小數釋放自己?
編輯
我有一個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.
編輯
這裏是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
您的發送消息到釋放實例。這就是爲什麼你的應用程序崩潰 –