我似乎得到这个错误。[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
您的发送消息到释放实例。这就是为什么你的应用程序崩溃 –