核心数据:当其他属性更改时,二进制数据属性变为零

时间:2018-10-01 20:25:04

标签: ios swift core-data nsfetchedresultscontroller

我的应用程序具有一个核心数据实体(称为产品),该实体具有两个属性:

  • 字符串类型的名称
  • 二进制数据类型的图像(选中“允许外部存储”)

自从我开发以来,现在,我在初始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)")
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

您可能想尝试以下操作:

?- getFirstPart([1,1,1],[1,2,3,4,5,6],L).
L = [1, 2, 3|_5081628].

您需要为密钥设置值以更新其值,然后才能保存它。希望对您有帮助