如何使用核心数据更新表视图单元格中的图像

时间:2016-08-11 13:26:13

标签: ios swift core-data

我正在使用图像选择器从本地设备库中选择图像,但是一旦使用xcode 7.3,ios9和swift 2.2使用核心数据关闭图库,图像就不会被保存并显示在表格视图单元格中

 if isUpdate == true{
            print("object id \(self.store?.objectID)")
            self.store?.sName = name.text
            self.store?.sDescription = desc.text
            //save.setTitle("my text here", forState: .Normal)
            let img = UIImage(named: "image.jpeg")
            let imgData = UIImageJPEGRepresentation(img!,1)
            self.store?.sImage = imgData
            do {
                try appdelegate.managedObjectContext.save()
                self.navigationController?.popViewControllerAnimated(true)
            } catch let error as NSError  {
                print("Could not save \(error), \(error.userInfo)")
            }

        }else{
            //get the description of the entity
            let storeDescription = NSEntityDescription.entityForName("Store",inManagedObjectContext: appdelegate.managedObjectContext)

            //we create managed object to be inserted to core data
            let store = EventsandnotesStore(entity : storeDescription!,insertIntoManagedObjectContext:appdelegate.managedObjectContext)
            store.sName = name.text
            store.sDescription = desc.text
            //
            let img = UIImage(named: "image.jpeg")

            let imgData = UIImageJPEGRepresentation(img!,1)

            store.sImage = imgData
            do {
                try appdelegate.managedObjectContext.save()
                self.navigationController?.popViewControllerAnimated(true)
            } catch let error as NSError  {
                print("Could not save \(error), \(error.userInfo)")
            }

          }


    }

1 个答案:

答案 0 :(得分:0)

由于你没有提到Name和Description字段的问题或者商店对象的创建,我假设所有工作都正常,你对CoreData进程没问题。

要检查的一件事是JPEG转换调用中的整数值1。这应该是一个Float,所以在调用中尝试1.0,虽然我很惊讶没有被XCode抓住。不确定这是否会导致您的问题。

你遇到的转换可能遇到的另一个潜在问题是UIImageJPEGRepresentation调用因其他原因而失败,返回nil值(例如,当我将CIImage直接转换为UIImage时发生这种情况,但是如果我通过CGImage做到这一点就行了 - 去图吧。鉴于这一切,您应该检查呼叫的结果。我使用了一个guard语句和自定义记录器,如下所示:

    guard let thumbnailData = UIImageJPEGRepresentation(thumbnailUI, Set.shared.jpegQuality) else
    {
        logError(#file, line: #line, column: #column, function: #function, description: "JPG Conversion Error - thumbnail")
        return nil
    }

如果失败了,你需要检查你从拣货员那里得到的图片。

如果您遇到数据库方面的问题,是否在视图控制器中包含了TableView委托函数(controllerWillChangeContent等)。您将需要这些,以便在带有图像的记录发生更改时调用configureCell方法。

这些是我开始的事情。