【发布时间】:2019-10-24 10:30:30
【问题描述】:
当我保存它时,它会正常保存并保存。 当我尝试更新任何东西时,图像变成零并显示空白图像和 当我执行拍摄相机动作时剩余数据变为nil,只需打开相机剩余数据将变为nil。
主要问题是为什么 Image 在更新时变为 nil,其余的都保持不变。只有图像将为空。
我能做些什么来解决这个问题?
//Navigation and ImagePicekrDelegate are for camera
var imagePicker: UIImagePickerController!
@IBOutlet weak var showImage: UIImageView!
var itemImageVar :UIImage? {
didSet{
}
}
override func viewWillAppear(_ animated: Bool) {
showImage.image = itemImageVar
}
//TODO: Saving image Here
var imageData:Data?
//Select Picture
@IBAction func choosePhotAction(_ sender: UIButton) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary //This is for opening photo library
present(imagePicker, animated: true, completion: nil)
}
@IBAction func takePhotoActionw(_ sender: UIButton) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let imageViewer = info[UIImagePickerController.InfoKey.originalImage] {
imagePicker.dismiss(animated: true,completion: nil)
showImage.image = imageViewer as! UIImage
saveImage(image: imageViewer as! UIImage)
}
}
func saveImage(image : UIImage) {
imageData = (image as! UIImage).jpegData(compressionQuality: 100)
print(imageData)
}
@IBAction func saveBtnAction(_ sender: UIButton) {
let newArray = Items()//Item is realm Data Model
newArray.itemName = itemName.text!
if let data = imageData as Data? {
newArray.itemImage = data
}
newArray.dateWise = Date()
//MARK: Realm data
//Creating/saving data here
if saveFlag == true {
//This will go to Create data and save
self.saveItems(item: newArray)
} else {
newArray.id = idVar!
self.updateItems(item: newArray)
}
self.navigationController?.popViewController(animated: true)
}
func saveItems(item: Items) {
do {
try realm.write { //Save/Create
realm.add(item)
}
} catch {
print("Error in saving \(error)")
}
}
func updateItems(item: Items) {
do {
try realm.write {//Save/Create
realm.add(item, update: .modified)
}
} catch {
print("Error in saving \(error)")
}
}
//Read the data after saving like displying again
func displayItems() {
itemArray = realm.objects(Items.self)
}
显示视图控制器:-
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "ItemDispplayCell", for: indexPath) as! ItemDispplayCell
if let cellItems = itemArray?[indexPath.row] {
if let data = item.itemImage as Data? {
cell.circleImag.image = UIImage(data: data)
}
}else {
cell.itemName.text = "No Items Added"
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let item = itemArray?[indexPath.row] {
if let data = item.itemImage as Data? {
vc.imageVar = UIImage(data: data)
}
}
func displayItems() {
itemArray = realm.objects(Items.self)
tableView.reloadData()
}
【问题讨论】:
-
这里
imageData是什么类型newArray.itemImage = imageData as NSData -
var imageData:Data?
-
你在哪里给它一个值
-
请分享更多代码
-
请再次检查问题,我更新代码。
标签: ios swift uiimageview realm