发送到已释放实例 Core Data 的消息
Posted
技术标签:
【中文标题】发送到已释放实例 Core Data 的消息【英文标题】:Message sent to deallocated instance Core Data 【发布时间】:2016-04-13 16:31:26 【问题描述】:尝试向 Core Data 添加字符串时出现标题错误。这是我的代码:
func save(name: String)
let model = CoreDataModel(modelName: modelName, modelBundle: modelBundle!, storeType: .SQLite(DocumentsDirectoryURL()))
let factory = CoreDataFactory(model: model)
let context = factory.createContext()
let entity = NSEntityDescription.entityForName("Transaction", inManagedObjectContext: context)
let transaction = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: context)
transaction.setValue(name, forKey: "name")
do
try context.save()
transactions.append(transaction)
catch let error as NSError
print(error)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("Cell")
let transaction = transactions[indexPath.row]
print(transaction)
cell!.textLabel!.text = transaction.valueForKey("name") as? String
return cell!
错误在这一行:
cell!.textLabel!.text = transaction.valueForKey("name") as? String
这是完整的错误描述:
<NSManagedObject: 0x7f9d5c216a90> (entity: <null>; id: 0xd000000000040000 <x-coredata://442A125F-AB41-4CA3-AAA5-A5C59840D5EE/Transaction/p1> ; data: <fault>)
2016-04-13 19:25:29.207 Project1[22981:2242560] *** -[NSEntityDescription _entityClass]: message sent to deallocated instance 0x7f9d5c2089e0
有人知道我为什么会得到这个吗?
【问题讨论】:
您可能应该在每次更新后从数据存储中的提取中填充您的事务数组,而不是将刚刚创建的托管对象附加到它。 稍后会这样做,但现在尝试在添加第一项时解决此问题。 【参考方案1】:问题似乎是我在本地创建了NSManagedObjectContext
以保存(),我必须将前3 行移至ViewDidLoad
,并将context
声明为类成员。
This 线程帮我弄清楚了。
【讨论】:
这就是我的意思:))以上是关于发送到已释放实例 Core Data 的消息的主要内容,如果未能解决你的问题,请参考以下文章
[UINavigationController 保留]:发送到已释放实例的消息