我正在使用 NSFetchedResultsController 从 CoreData 获取数据并加载包含四个部分的 TableView 。当应用程序第一次运行时,它可以完美地工作,将 plist 加载到 CoreData 中,然后获取记录以配置表的 4 个部分中的单元格。
当我重新启动应用程序时,会出现问题,类中的初始化值似乎覆盖了我认为/认为存储在核心数据中的值。 NSFetchedResultsController 成功加载未由类初始化的值。
例如,有一个值 tableSection 来定义表部分。当表格第一次加载时,它有四个部分:
但是,如果我再次运行应用程序,则只有 1 个 tableSection 值,“我的记录”(用户首次创建记录时的默认值):
我不确定,但我认为当我配置单元时会发生这种情况...
func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
{
let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record ...}
看起来,当自定义类启动时,会分配初始值,并且永远不会被我认为在 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
方法中设置 NSManagedObject
的值。调用 init
后,将填充 NSManagedObject
。如果您需要覆盖值,请在 awakeFromFetch
或 awakeFromInsert
方法中执行此操作。
我强烈建议您查看 Core Data Programming Guide关于要覆盖的内容。
关于swift - FetchedResultsController 值不会覆盖自定义 NSManagedObject 初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36772705/