添加新记录的核心数据错误

Posted

技术标签:

【中文标题】添加新记录的核心数据错误【英文标题】:core data errors adding new record 【发布时间】:2015-01-11 04:15:47 【问题描述】:

我将 Xcode 6.1.1 与 Swift 一起使用。该项目正在使用核心数据来保存 Sightings

import Foundation
import CoreData
@objc(Sighting)

class Sighting: NSManagedObject 
    @NSManaged var lat: Double
    @NSManaged var lng: Double
    @NSManaged var seen_at: NSDate

在 IBaction 中,我创建了一个新的 Sighting

@IBAction func addSighting(sender: AnyObject) 
    let coordinate = locationManager.location.coordinate
    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let managedContext = appDelegate.managedObjectContext!
    let sighting = NSEntityDescription.insertNewObjectForEntityForName("Sighting", inManagedObjectContext: managedContext) as Sighting

    sighting.lat = coordinate.latitude
    sighting.lng = coordinate.longitude
    ...

在“让瞄准=”行我收到错误 swift_dynamicCastClassUnconditional。任何想法为什么?

替换该行
    let entityDescripition = NSEntityDescription.entityForName("Sighting", inManagedObjectContext: managedContext)
    let sighting = Sighting(entity: entityDescripition!, insertIntoManagedObjectContext: managedContext)

似乎解决了这个问题,但它只会导致下一行“sighting.lat =”给出错误 EXC_BAD_ACCESS > objc_msgSend

coordinate.latitude 正确返回 CLLocationDegrees

任何有关如何解决此问题的想法都将不胜感激。谢谢!

【问题讨论】:

是否将课程标记为公开:public class Sighting: NSManagedObject 帮助? 【参考方案1】:

我怀疑您的模型没有将实体“Sighting”与 Sighting 类链接。在模型编辑器中选择实体,在右侧的数据模型检查器面板中输入类名:

请注意,在 Swift 中,类名必须包含您的模块(应用程序)的名称。

【讨论】:

太棒了。我在类输入中没有类名。添加没有应用程序名称的“Sighting”似乎工作正常。谢谢!

以上是关于添加新记录的核心数据错误的主要内容,如果未能解决你的问题,请参考以下文章

添加然后删除索引后核心数据错误“错误配置的实体:在复合索引属性中...不是有效属性”

核心数据触发错误将对象添加到 NSMutableArray?

核心数据错误 1550

核心数据异常:向实体添加新属性后出现 SQLite“没有这样的列”错误

iOS Swift 3核心数据-尝试递归调用-save的致命错误:上下文中止

与 Core Data 相关的 Cocoa 错误 19