我的应用程序具有一个核心数据实体(称为产品),该实体具有两个属性:
自从我开发以来,现在,我在初始viewDidLoad
中创建了一个默认对象,并使用名称和图像的硬编码值。创建对象后,我可以将其传递并在我的应用程序中使用它而不会出现问题。
但是,如果我将name属性更新为新的字符串值,然后重新运行应用程序,则图像属性将变为nil
(此行为仅在我重新运行之后才会发生或终止并重新打开它)。您知道什么可能导致此行为吗?
这是我更改名称值的方法:
DataController.shared.viewContext.perform {
if mike {
product.name = "Mike"
} else {
product.name = "Bob"
}
try? DataController.shared.viewContext.save()
}
我正在使用DataController类与持久性存储接口:
class DataController {
static let shared = DataController(modelName: "my_model")
let persistentContainer: NSPersistentContainer
var viewContext: NSManagedObjectContext {
return persistentContainer.viewContext
}
private init(modelName: String) {
persistentContainer = NSPersistentContainer(name: modelName)
}
func configureContexts() {
viewContext.automaticallyMergesChangesFromParent = true
viewContext.mergePolicy = NSMergePolicy.mergeByPropertyStoreTrump
}
}
我也在使用NSFetchedResultsController
。这就是我在viewDidLoad
中进行设置的方式:
fileprivate func setupFetchedResultsController() {
let fetchRequest:NSFetchRequest<Product> = Product.fetchRequest()
let sortDescriptor = NSSortDescriptor(key: "salesByVolume", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DataController.shared.viewContext, sectionNameKeyPath: nil, cacheName: "products")
fetchedResultsController.delegate = self
do {
try fetchedResultsController.performFetch()
} catch {
fatalError("The request could not be performed: \(error.localizedDescription)")
}
}
谢谢!
答案 0 :(得分:0)
您可能想尝试以下操作:
?- getFirstPart([1,1,1],[1,2,3,4,5,6],L).
L = [1, 2, 3|_5081628].
您需要为密钥设置值以更新其值,然后才能保存它。希望对您有帮助