2016-04-21 36 views
0

我正在使用NSFetchedResultsController从CoreData获取数据并加载包含四个部分的表视图。当应用程序第一次运行时,它可以很好地工作,将一个plist加载到CoreData中,然后获取记录以配置表格的4个部分中的单元格。FetchedResultsController值不会覆盖自定义的NSManagedObject初始值

当我重新启动应用程序时,该类的初始值似乎覆盖了我认为/认为存储在核心数据中的值。未由该类初始化的值由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 ...} 

它看起来像自定义类启动时,初始值被赋值,并且永远不会被我认为会在fetchedResultsContainer中的值覆盖。凡是不给自定义类初始化的值,如文本和图像,从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的数据? (如果这是我的问题)

回答

1

不要在init方法中设置NSManagedObject的值。在init被调用后,NSManagedObject被填充。如果您需要覆盖值,请在awakeFromFetchawakeFromInsert方法中执行。

我强烈建议查看要重写的内容Core Data Programming Guide

+0

哦是的 - 你不鼓励重写initWithEntity:insertIntoManagedObjectContext:和描述。如果描述在调试操作期间触发故障,则结果可能不可预知。您通常不应覆盖键值编码方法,如valueForKey:和setValue:forKeyPath :.知道了谢谢。 – DrWhat