переместить индекс с 0 на 1 при сохранении основных атрибутов данных - PullRequest
0 голосов
/ 03 февраля 2020

Мой код swift ниже сохраняет 2 изображения в двоичные данные ядра. Когда пользователь вводит 1 или 0 в текстовое поле, изображение просматривает данные и отображает. Я хочу переместить индекс, чтобы он начинался с 1, а не с 0. Когда пользователь вводит 0 в текстовое поле, ничего в изображении не должно отображаться. В моей основной модели данных пи c - это двоичные данные.

 import UIKit
import CoreData
class ViewController: UIViewController,UITextFieldDelegate {


@IBOutlet var labelName : UILabel!
@IBOutlet var enterT : UITextField!
@IBOutlet var pic : UIImageView!
lazy var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

override func viewDidLoad() {
    super.viewDidLoad()

    enterT.delegate = self

    pic.backgroundColor = .cyan
    populateData()
}


func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    guard let text = (textField.text as? NSString)?.replacingCharacters(in: range, with: string), let index = Int(text) else { //here....
        // display an alert about invalid text
        return true
    }
    loadImage(at: index )
    return true
}

func loadImage(at index : Int) {
    let fetchRequest = NSFetchRequest<Users>(entityName: "Users")
    fetchRequest.predicate = NSPredicate(format: "idx == %d", Int32(index))
    do {
        if let user = try context.fetch(fetchRequest).first {
            pic.image = UIImage(data: user.image!)
        } else {
           pic.image = nil
        }
    } catch {
        print("Could not fetch \(error) ")
    }
}

@IBAction func add(){
    // fetch()
}

func populateData()
{
    let item = Users(context: context)
    let vex = UIImage(named: "on.jpg")!.pngData()
    item.image = vex
    item.idx = 0

    let item2 = Users(context: context)
    let vex2 = UIImage(named: "house.jpg")!.pngData()
    item2.image = vex2
    item2.idx = 1

    print("Storing Data..")
    do {
        try context.save()
    } catch {
        print("Storing data Failed", error)
    }
}
}

1 Ответ

0 голосов
/ 03 февраля 2020

что вы можете сделать, это позвонить index - 1

Когда пользователь вводит 0 в текстовое поле, ничего в imageview не будет отображаться, потому что индекс - 1 становится -1, а NSPredicate(format: "idx == %d", Int32(index)) возвращает nil

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    guard let text = (textField.text as? NSString)?.replacingCharacters(in: range, with: string), let index = Int(text) else { //here....
        // display an alert about invalid text
        return true
    }
    loadImage(at: index - 1 )
    return true
}

надеюсь, что это поможет вам =) счастливое кодирование

ИЛИ что вы можете сделать, это сохранить индекс в coredata соответственно после удаления приложения

func populateData()
{
    let item = Users(context: context)
    let vex = UIImage(named: "on.jpg")!.pngData()
    item.image = vex
    item.idx = 1

    let item2 = Users(context: context)
    let vex2 = UIImage(named: "house.jpg")!.pngData()
    item2.image = vex2
    item2.idx = 2

    print("Storing Data..")
    do {
        try context.save()
    } catch {
        print("Storing data Failed", error)
    }
}
...