我正在使用NSFetchedResultsController从CoreData获取数据并加载包含四个部分的表视图。当应用程序第一次运行,将plist加载到CoreData然后获取记录以配置表的4个部分中的单元格时,它可以正常工作。
当我重新启动应用程序时出现问题,类中的初始值似乎会覆盖我认为/认为存储在核心数据中的值。 NSFetchedResultsController已成功加载未由类初始化的值。
例如,有一个值tableSection来定义表部分。当表第一次加载时,它有四个部分:
但是,如果我再次运行应用程序,则只有1个tableSection值,“我的记录”(用户首次创建记录时的默认值):
我不确定,但我认为在配置单元格时会发生这种情况......
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'? (如果这是我的问题)
答案 0 :(得分:1)
请勿在{{1}}方法中设置NSManagedObject
的值。调用init
后会填充NSManagedObject
。如果您需要覆盖值,请使用init
或awakeFromFetch
方法执行此操作。
我强烈建议您查看有关覆盖内容的Core Data Programming Guide。