FetchedResultsController值不会覆盖自定义NSManagedObject初始值

时间:2016-04-21 14:30:51

标签: swift uitableview core-data nsfetchedresultscontroller

我正在使用NSFetchedResultsController从CoreData获取数据并加载包含四个部分的表视图。当应用程序第一次运行,将plist加载到CoreData然后获取记录以配置表的4个部分中的单元格时,它可以正常工作。

当我重新启动应用程序时出现问题,类中的初始值似乎会覆盖我认为/认为存储在核心数据中的值。 NSFetchedResultsController已成功加载未由类初始化的值。

例如,有一个值tableSection来定义表部分。当表第一次加载时,它有四个部分:

enter image description here

但是,如果我再次运行应用程序,则只有1个tableSection值,“我的记录”(用户首次创建记录时的默认值):

enter image description here

我不确定,但我认为在配置单元格时会发生这种情况......

func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
{
    let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record ...}

看起来当启动自定义类时,init值被赋值,并且永远不会被我认为在fetchedResultsContainer中的值覆盖。在自定义类init中没有给出任何值的东西,比如文本和图像,都是从fetchedResultsController分配的值:

    class Record: NSManagedObject
{
    override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?)
    {
        super.init(entity: entity, insertIntoManagedObjectContext: context)
        let randomBit = String(arc4random_uniform(100))
        iD = NSDate().toIDTimeDateString() + "-" + randomBit + "OtR"

        believers = 0
        deviceTime = NSDate()
        doubters = 0
        eventTimeStarted = NSDate()
        eventTimeEnded = NSDate()
        featureImageIndex = 0
        coreLocationUsed = 0
        photoTaken = 0
        tableSection = "My Records"
        timeRecorded = deviceTime
        validationScore = 0
    }
}

如何以一种用fetchedResultsController中的数据覆盖init值的方式实例化'Record'? (如果这是我的问题)

1 个答案:

答案 0 :(得分:1)

请勿在{{1​​}}方法中设置NSManagedObject的值。调用init后会填充NSManagedObject。如果您需要覆盖值,请使用initawakeFromFetch方法执行此操作。

我强烈建议您查看有关覆盖内容的Core Data Programming Guide