FetchedResultsController 值不会覆盖自定义 NSManagedObject 初始值
FetchedResultsController values are not overwriting custom NSManagedObject init values
我正在使用 NSFetchedResultsController 从 CoreData 获取数据并加载包含四个部分的 table 视图。它在应用程序首次 运行 时完美运行,将 plist 加载到 CoreData,然后获取记录以配置 table 的 4 个部分中的单元格。
当我重新启动应用程序时出现问题,class 中的初始值似乎覆盖了我 thought/think 存储在核心数据中的值。未被 class 初始化的值被 NSFetchedResultsController 成功加载。
例如,有一个值tableSection,用于定义table个部分。当 table 第一次加载时,它有四个部分:
但是,如果我再次 运行 应用程序,只有 1 个 table 部分值,[=32=](用户首次创建记录时的默认值):
我不确定,但我认为在配置单元时会发生这种情况...
func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
{
let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record ...}
看起来当自定义 class 启动时,初始化值被分配并且永远不会被我认为在 fetchedResultsContainer 中的值覆盖。自定义 class 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
}
}
如何实例化一个 'Record' 以使用来自 fetchedResultsController 的数据覆盖初始值? (如果这是我的问题)
不要在 init
方法中为 NSManagedObject
设置值。 NSManagedObject
在 init
被调用后被填充。如果您需要覆盖值,请在 awakeFromFetch
或 awakeFromInsert
方法中进行。
我强烈建议查看 Core Data Programming Guide 以了解要覆盖的内容。
我正在使用 NSFetchedResultsController 从 CoreData 获取数据并加载包含四个部分的 table 视图。它在应用程序首次 运行 时完美运行,将 plist 加载到 CoreData,然后获取记录以配置 table 的 4 个部分中的单元格。
当我重新启动应用程序时出现问题,class 中的初始值似乎覆盖了我 thought/think 存储在核心数据中的值。未被 class 初始化的值被 NSFetchedResultsController 成功加载。
例如,有一个值tableSection,用于定义table个部分。当 table 第一次加载时,它有四个部分:
但是,如果我再次 运行 应用程序,只有 1 个 table 部分值,[=32=](用户首次创建记录时的默认值):
我不确定,但我认为在配置单元时会发生这种情况...
func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
{
let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record ...}
看起来当自定义 class 启动时,初始化值被分配并且永远不会被我认为在 fetchedResultsContainer 中的值覆盖。自定义 class 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
}
}
如何实例化一个 'Record' 以使用来自 fetchedResultsController 的数据覆盖初始值? (如果这是我的问题)
不要在 init
方法中为 NSManagedObject
设置值。 NSManagedObject
在 init
被调用后被填充。如果您需要覆盖值,请在 awakeFromFetch
或 awakeFromInsert
方法中进行。
我强烈建议查看 Core Data Programming Guide 以了解要覆盖的内容。