Возникли проблемы с использованием класса в рамках segue - PullRequest
1 голос
/ 10 октября 2019

Попытка получить VC 'edit' для передачи обратно в '' display 'VC' новой информации, которая была обновлена ​​пользователем посредством Storyboard segue, но возникают трудности с сохранением пользовательских входных данных в моем инициализированном классе 'Event'

Я получаю эту ошибку

Cannot invoke initializer for type 'Event' with an argument list of type '(eventName: String, eventLocation: String, eventStart: String, eventDescription: String, eventHost: String)'

Мой редактор (источник) VC (ошибка в подготовке к ...)

class EditEventDetailTableViewController: UITableViewController {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var eventName: UITextField!
@IBOutlet weak var eventStartDate: UITextField!
@IBOutlet weak var eventLocation: UITextField!
@IBOutlet weak var eventDescription: UITextView!
@IBOutlet weak var eventHost: UITextField!

var event:Event?
var eventUpdate:Event?

override func viewDidLoad() {
    super.viewDidLoad()

    //imageView.image = detail?.photo
    eventName.text = event?.eventName
    eventStartDate.text = event?.eventStart
    eventLocation.text = event?.eventLocation
    eventDescription.text = event?.eventDescription
    eventHost.text = event?.eventHost

    guard let urlString = (event?.eventCoverUrl) else { return  }
    let url = URL(string: urlString)
         guard url != nil else {
             //Couldn't create url object
             return
         }
    self.imageView.sd_setImage(with: url) { (image, error, cacheType, url) in
        self.imageView.image = image
    }
}

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


   if let eventName = eventName.text?.trimmingCharacters(in: .whitespacesAndNewlines),
       let eventStart = eventStartDate.text?.trimmingCharacters(in: .whitespacesAndNewlines),
       let eventLocation = eventLocation.text?.trimmingCharacters(in: .whitespacesAndNewlines),
       let eventDescription = eventDescription.text?.trimmingCharacters(in: .whitespacesAndNewlines),
       let eventHost = eventHost.text?.trimmingCharacters(in: .whitespacesAndNewlines) {
    self.event = Event(eventName: eventName, eventLocation: eventLocation, eventStart: eventStart, eventDescription: eventDescription, eventHost: eventHost)
   }}}

Вот мой класс

class Event {

var adminUser:String?
var eventCreated:Date?
var eventId:String?
var eventName:String?
var eventCoverUrl:String?
var eventLocation:String?
var eventStart:String?
var eventEnd:Date?
var eventStatus:String?
//var eventParticipants: [String?]
var eventDescription:String?
var eventDeleteDate:Date?
var eventHost:String?


init?(snapshot:DocumentSnapshot){

    self.eventId = snapshot.get("eventId") as? String ?? "No event Id"
    self.adminUser = snapshot.get("adminUser") as? String ?? "No admin user"
    //self.eventCreated = snapshot.get("eventCreated") as? Date ?? "No Event Created Date"
    self.eventName = snapshot.get("eventName") as? String ?? "No Event Name"
    self.eventCoverUrl = snapshot.get("eventCoverUrl") as? String ?? "No Cover URL"
    self.eventLocation = snapshot.get("eventLocation") as? String ?? "No Location"
    self.eventStart = snapshot.get("eventStart") as? String ?? "No Start Date"
    self.eventDescription = snapshot.get("eventDescription") as? String ?? "No Event Description"
    self.eventHost = snapshot.get("eventHost") as? String ?? "No Event Host"
    self.eventStatus = snapshot.get("eventStatus") as? String ?? "No Event Status"

}

init(adminUser:String?, eventId:String?, eventName:String?, eventCoverUrl:String?, eventLocation:String?, eventStart:String?, eventStatus:String?, eventDescription:String?, eventHost:String?) {

    self.adminUser = adminUser ?? "No \(LocalizedError.self)"
    self.eventId = eventId ?? "No \(LocalizedError.self)"
    self.eventName = eventName ?? "No \(LocalizedError.self)"
    self.eventCoverUrl = eventCoverUrl ?? "No \(LocalizedError.self)"
    self.eventLocation = eventLocation ?? "No \(LocalizedError.self)"
    self.eventStart = eventStart ?? "No \(LocalizedError.self)"
    self.eventStatus = eventStatus ?? "No \(LocalizedError.self)"
    self.eventDescription = eventDescription ?? "No \(LocalizedError.self)"
    self.eventHost = eventHost ?? "No \(LocalizedError.self)"
}
}

Я пробовал множество способов, но ничто не позволяет мне использовать пользовательский ввод для отредактированных полей, чтобы создать «событие», а затем передать его в мой дисплейный (целевой) VC через сеанс отката, который уже работает.

Это обновленный код класса Event с обновленными параметрами, инициализированными в пустую строку. Все остальное остается таким, как указано выше.

var adminUser = ""
var eventCreated = ""
var eventId = ""
var eventName = ""
var eventCoverUrl = ""
var eventLocation = ""
var eventStart = ""
var eventEnd:Date?
var eventStatus:String?
//var eventParticipants: [String?]
var eventDescription = ""
var eventDeleteDate = ""
var eventHost = ""

1 Ответ

1 голос
/ 10 октября 2019

Вы не можете оставить параметры вне вызова функции. Event(eventName, eventLocation, eventStart, eventDescription, eventHost) не определено, поскольку фактический метод - Event(adminUser, eventId, eventName, eventCoverUrl, eventLocation, eventStart, eventStatus, eventDescription, eventHost). Вам необходимо изменить последнюю строку в prepareForSegue на:

self.event = Event(adminUser: adminUser, eventId: eventId, eventName: eventName, eventCoverUrl: eventCoverUrl, eventLocation: eventLocation, eventStart: eventStart, eventStatus:eventStatus, eventDescription: eventDescription, eventHost: eventHost)
...