Передача информации из ViewController в ViewController с помощью Swift - PullRequest
0 голосов
/ 16 октября 2018

Я новичок в кодировании и Swift.Для моей первой попытки приложения я пытаюсь создать мобильное приложение для напоминания о музыке, в котором я могу напечатать «Исполнитель», «Альбом» и «Дата выпуска», и оно уведомит меня о дате выпуска, когда альбом вышел сегодня.

Я работаю над кнопкой редактирования, где, если я неправильно написал Исполнителя или Альбома или даже неправильно указал Дату выпуска, я мог бы зайти и отредактировать уже сохраненную информацию и сохранить новые данные поверх оригинала..

В настоящее время я пытаюсь передать информацию от одного ViewController к другому ViewController, но у меня возникают некоторые трудности.

Мне нужна информация об исполнителе, альбоме и дате выпуска из AddfreshreleaseViewController, чтобыперейти к EditfreshreleaseViewController

До сих пор я только пытался передать информацию об исполнителе, но мне не повезло.Я смотрел видео и читал многочисленные статьи и книги, но не могу заставить его работать.

Ниже приведен код AddfreshreleaseViewController:

 import UIKit
 import CoreData
 import UserNotifications

 class AddfreshreleaseViewController: UIViewController {

@IBOutlet weak var Artist: UITextField!


/* @IBOutlet weak var textfield = UITextField? (artisttextfield!)



let EditfreshreleaseViewController =  segue.destination as! EditfreshreleaseViewController

EditfreshreleaseViewController.receivedString = artisttextfield.text!

}

override func prepare (for segue: UIStoryboardSegue, sender: Any?) {*/


@IBOutlet var artisttextfield: UITextField!
@IBOutlet var albumtextfield: UITextField!
@IBOutlet var releasedatePicker: UIDatePicker!

override func viewDidLoad() {
    super.viewDidLoad()

    releasedatePicker.minimumDate = Date()

    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
        var destinationAddfreshreleaseViewController : EditfreshreleaseViewController = segue.destinationAddfreshreleaseViewController as EditfreshreleaseViewController

        destinationAddfreshreleaseViewController.ArtistText = Artist.text!

    }

    // Do any additional setup after loading the view, typically from a nib.
}
@IBAction func saveTapped( _ sender: UIBarButtonItem) {

    let artist = artisttextfield.text ?? ""
    let album = albumtextfield.text ?? ""
    let releasedate = releasedatePicker.date

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext

    let newRelease = Release_Date(context: context)
    newRelease.artist = artist
    newRelease.album = album
    newRelease.release_date = releasedate as NSDate?
    newRelease.release_dateId = UUID().uuidString

    if let uniqueId = newRelease.release_dateId {
        print("The freshreleaseId is \(uniqueId)")
    }

    do {
        try context.save()
        let message = "\(artist)'s new album \(album) releases Today!"
        let content = UNMutableNotificationContent()
        content.body = message
        content.sound = UNNotificationSound.default()
        var dateComponents = Calendar.current.dateComponents([.month, .day],
            from: releasedate)
        dateComponents.hour = 09
        dateComponents.minute = 00
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents,
            repeats: true)
        if let identifier = newRelease.release_dateId {

            let request = UNNotificationRequest(identifier: identifier,
                content: content, trigger: trigger)
            let center = UNUserNotificationCenter.current()
            center.add(request, withCompletionHandler: nil)
        }
    } catch let error {
        print("Could not save because of \(error).")
    }

    dismiss(animated: true, completion: nil)

    print("Added a Release Date!")
    print("Artist: \(newRelease.artist)")
    print("Album: \(newRelease.album)")
    print("Release Date: \(newRelease.release_date)")
}

@IBAction func cancelTapped(_ sender: UIBarButtonItem) {
    dismiss(animated: true, completion: nil)
}



}

Ниже приведен код EditfreshreleaseViewController:

 import UIKit
 import CoreData
 import UserNotifications

 class EditfreshreleaseViewController: UIViewController {

@IBOutlet var Artist: UITextField!

var ArtistText = String()

@IBOutlet var artisttextfield: UITextField!
@IBOutlet var albumtextfield: UITextField!
@IBOutlet var releasedatePicker: UIDatePicker!
/*@IBOutlet weak var artist: UILabel! (ArtistTextField!)
    var receivedString = ""*/


override func viewDidLoad() {

    Artist.text = ArtistText

    super.viewDidLoad()

    /*artist.text = receivedString*/

    releasedatePicker.minimumDate = Date()

    // Do any additional setup after loading the view, typically from a nib.
}
@IBAction func saveTapped( _ sender: UIBarButtonItem) {

    let artist = artisttextfield.text ?? ""
    let album = albumtextfield.text ?? ""
    let releasedate = releasedatePicker.date

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext

    let newRelease = Release_Date(context: context)
    newRelease.artist = artist
    newRelease.album = album
    newRelease.release_date = releasedate as NSDate?
    newRelease.release_dateId = UUID().uuidString

    if let uniqueId = newRelease.release_dateId {
        print("The freshreleaseId is \(uniqueId)")
    }

    do {
        try context.save()
        let message = "\(artist)'s new album \(album) releases Today!"
        let content = UNMutableNotificationContent()
        content.body = message
        content.sound = UNNotificationSound.default()
        var dateComponents = Calendar.current.dateComponents([.month, .day],
                                                             from: releasedate)
        dateComponents.hour = 09
        dateComponents.minute = 00
        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents,
                                                    repeats: true)
        if let identifier = newRelease.release_dateId {

            let request = UNNotificationRequest(identifier: identifier,
                                                content: content, trigger: trigger)
            let center = UNUserNotificationCenter.current()
            center.add(request, withCompletionHandler: nil)
        }
    } catch let error {
        print("Could not save because of \(error).")
    }

    dismiss(animated: true, completion: nil)

    print("Added a Release Date!")
    print("Artist: \(newRelease.artist)")
    print("Album: \(newRelease.album)")
    print("Release Date: \(newRelease.release_date)")
}

@IBAction func cancelTapped(_ sender: UIBarButtonItem) {
    dismiss(animated: true, completion: nil)
}



 }

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 16 октября 2018

Функция prepareForSegue - это метод UIViewController, который должен быть переопределен подклассами для передачи данных между другими ViewControllers через переход.

Попробуйте отредактировать код в AddfreshreleaseViewController следующим образом.(Я в основном удалил некоторый код из вашей viewDidLoad функции и добавил новый прямо под ней)

override func viewDidLoad() {
    super.viewDidLoad()

    releasedatePicker.minimumDate = Date()
}

override func prepareForSegue(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? EditfreshreleaseViewController{
        destination.ArtistText = Artist.text!
    }
}
...