UiTextField in ViewController2 Change value of Struct Var - ios

I have two view Controllers connected with a tabBar. In the first tab, I see all buttons to add Repairs and Delete Repairs. In The First Step of my private project, I have Static values for the Repair times. Now in my second step, I wanted to change the time that a person needs to repair by the second tap, but when I go back after editing the time in the second VieController, the value of the struct didn't change.
ViewController.swift
class ViewController: UIViewController {
#IBOutlet weak var AddBrepair: UIButton!
#IBOutlet weak var AddOrepair: UIButton!
#IBOutlet weak var AddDrepair: UIButton!
#IBOutlet weak var GeniusNumber: UISegmentedControl!
#IBOutlet weak var AddBCrepair: UIButton!
#IBOutlet weak var CheckOutOrepair: UIButton!
#IBOutlet weak var CheckOutBrepair: UIButton!
#IBOutlet weak var CheckOutBCrepair: UIButton!
#IBOutlet weak var CheckOutDrepair: UIButton!
#IBOutlet weak var DisplayLeftNumber: UILabel!
#IBOutlet weak var RFPTime: UILabel!
#IBOutlet weak var CurrentTimerepair: UILabel!
let repairTime=RepairTime()
override func viewDidLoad() {
super.viewDidLoad()
//RFPTime.text = repairTime.ReadyForPickup()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//print(repairTime.getNumberOfRepairGenius())
}
#IBAction func Controller(sender: AnyObject) {
repairTime.NumberOfRepairGenius(GeniusNumber.selectedSegmentIndex+1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
#IBAction func AddBr(sender: AnyObject) {
repairTime.NumberOfBatteryRepair(repairTime.getNumberOfBatteryRepair()+1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
#IBAction func AddOr(sender: AnyObject) {
repairTime.NumberOfOtherRepair(repairTime.getNumberOfOtherRepair()+1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
#IBAction func AddBCr(sender: AnyObject) {
repairTime.NumberOfBackCoverRepair(repairTime.getNumberOfBackCoverRepair()+1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
#IBAction func AddDr(sender: AnyObject) {
repairTime.NumberOfDisplayRepair(repairTime.getNumberOfDisplayRepair()+1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
//print("view controler")
//print(
}
#IBAction func DeleteBr(sender: AnyObject) {
if(repairTime.getNumberOfBatteryRepair() != 0){
repairTime.NumberOfBatteryRepair(repairTime.getNumberOfBatteryRepair()-1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
}
#IBAction func DeleteOr(sender: AnyObject) {
if(repairTime.getNumberOfOtherRepair() != 0){
repairTime.NumberOfOtherRepair(repairTime.getNumberOfOtherRepair()-1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
}
#IBAction func DeleteBCr(sender: AnyObject) {
if(repairTime.getNumberOfBackCoverRepair() != 0){
repairTime.NumberOfBackCoverRepair(repairTime.getNumberOfBackCoverRepair()-1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
}
#IBAction func DeleteDr(sender: AnyObject) {
if(repairTime.getNumberOfDisplayRepair() != 0){
repairTime.NumberOfDisplayRepair(repairTime.getNumberOfDisplayRepair()-1)
CurrentTimerepair.text = String(format:"%.1f", repairTime.TimeOfRepair())
RFPTime.text = String(repairTime.ReadyForPickup())
}
}
#IBAction func ShowQueuePop(sender: AnyObject) {
let out="Display Repair: \(repairTime.getNumberOfDisplayRepair()) \n Other Repair: \(repairTime.getNumberOfOtherRepair()) \n Battery Repair: \(repairTime.getNumberOfBatteryRepair()) \n Back Cover Repair: \(repairTime.getNumberOfBackCoverRepair())"
let alertController = UIAlertController(title: "Current repair Queue", message: out
, preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
}
class RepairTime {
var optiontime = OptionTime()
var RepairGenius: Int = 1
var DisplayRepair: Int = 0
var OtherRepair: Int = 0
var BackCoverRepair: Int = 0
var BatteryRepair: Int = 0
func TimeOfRepair()->Double{
var repairtimezwei: Double
repairtimezwei=0.0
var repairzeit: Int
repairzeit=0
repairzeit=(BatteryRepair*optiontime.BatteryTime)+(BackCoverRepair*optiontime.BCTime)+(DisplayRepair*optiontime.DisplayTime)+(OtherRepair*optiontime.OtherTime)
//print(DisplayRepair)
repairtimezwei = (Double(repairzeit)/Double(RepairGenius))+15.0
return repairtimezwei
}
so and this is my second viewController:
class ViewController2: UIViewController,UITextFieldDelegate {
var optiontime = OptionTime()
#IBOutlet weak var DisplayTime: UITextField!
#IBOutlet weak var BatteryTime: UITextField!
#IBOutlet weak var BackCoverTime: UITextField!
#IBOutlet weak var OtherTime: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//RFPTime.text = repairTime.ReadyForPickup()
// set TextField with Values of struct optionTime from class RepairTime
DisplayTime.text=String(optiontime.DisplayTime)
BatteryTime.text=String(optiontime.BatteryTime)
BackCoverTime.text=String(optiontime.BCTime)
OtherTime.text=String(optiontime.OtherTime)
//set KeybardType for Textinputs
self.DisplayTime.keyboardType = UIKeyboardType.NumbersAndPunctuation
self.BatteryTime.keyboardType = UIKeyboardType.NumbersAndPunctuation
self.BackCoverTime.keyboardType = UIKeyboardType.NumbersAndPunctuation
self.OtherTime.keyboardType = UIKeyboardType.NumbersAndPunctuation
self.DisplayTime.delegate = self
self.BatteryTime.delegate = self
self.BackCoverTime.delegate = self
self.OtherTime.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
self.view.endEditing(true)
return false
}
#IBAction func TimeChangeDisplay(sender: AnyObject) {
optiontime.DisplayTime = Int(DisplayTime.text!)!
print("vie controler 2")
print(optiontime.DisplayTime)
}
#IBAction func TimeChangeBattery(sender: AnyObject) {
optiontime.BatteryTime = Int(BatteryTime.text!)!
}
#IBAction func TimeChangeBC(sender: AnyObject) {
optiontime.BCTime = Int(BackCoverTime.text!)!
}
#IBAction func TimeChangeOther(sender: AnyObject) {
optiontime.OtherTime = Int(OtherTime.text!)!
}
}
My Problem is that the value of the struct after finishing the edit in the textfield didn't change.

Related

Xcode, textfield delegate, error on line textField.delegate = self

It's my first time creating an app with Xcode, and I have come across an error I can't figure out. The fatal error:
Thread 1: Fatal error: Unexpectedly found nil while implicitly
unwrapping an Optional value, occurs on line 29.
I've seen other posts with comments saying "check your outlets", but they're all good. I've included the Connections inspector of one of my textfields in case it helps.
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
var mssgArray:[Int] = [0,0,0,0,0,0,0,0]
#IBOutlet weak var ItemQ: UITextView!
#IBOutlet weak var RTC: UITextView!
#IBOutlet weak var ExpoPrompt: UITextView!
#IBOutlet weak var OrderPrompt: UITextView!
#IBOutlet weak var Data: UITextView!
#IBOutlet weak var CusID: UITextField!
#IBOutlet weak var FirstN: UITextField!
#IBOutlet weak var LastN: UITextField!
#IBOutlet weak var PhoneNum: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
CusID.delegate = self
FirstN.delegate = self
LastN.delegate = self
PhoneNum.delegate = self
}
#IBAction func PizzaBut(_ sender: UIButton) {
if(mssgArray[0] == 0)
{
ItemQ.text += "Pizza\n"
mssgArray[0] = 1
}
if(mssgArray[0] == 1)
{
mssgArray[0] = 2
}
}
#IBAction func SubBut(_ sender: UIButton) {
if(mssgArray[1] == 0)
{
ItemQ.text += "Sub\n"
mssgArray[1] = 1
}
if(mssgArray[1] == 1)
{
mssgArray[1] = 2
}
}
#IBAction func QuesoBut(_ sender: UIButton) {
if(mssgArray[2] == 0)
{
ItemQ.text += "Queso\n"
mssgArray[2] = 1
}
if(mssgArray[2] == 1)
{
mssgArray[2] = 2
}
}
#IBAction func BagBut(_ sender: UIButton) {
if(mssgArray[3] == 0)
{
ItemQ.text += "Baguette\n"
mssgArray[3] = 1
}
if(mssgArray[3] == 1)
{
mssgArray[3] = 2
}
}
#IBAction func PretzelBut(_ sender: UIButton) {
if(mssgArray[4] == 0)
{
ItemQ.text += "Pretzels\n"
mssgArray[4] = 1
}
}
#IBAction func MeatballBut(_ sender: UIButton) {
if(mssgArray[5] == 0)
{
ItemQ.text += "Meatball\n"
mssgArray[5] = 1
}
if(mssgArray[5] == 1)
{
mssgArray[5] = 2
}
}
#IBAction func BoardBut(_ sender: UIButton) {
if(mssgArray[6] == 0)
{
ItemQ.text += "Charcuterie Board\n"
mssgArray[0] = 1
}
if(mssgArray[6] == 1)
{
mssgArray[6] = 2
}
}
#IBAction func SaladBut(_ sender: UIButton) {
if(mssgArray[7] == 0)
{
ItemQ.text += "Salad\n"
mssgArray[7] = 1
}
if(mssgArray[7] == 1)
{
mssgArray[7] = 2
}
}
#IBAction func ClearBut(_ sender: UIButton) {
ItemQ.text = ""
mssgArray = [0,0,0,0,0,0,0,0]
}
#IBAction func SendMssg(_ sender: UIButton) {
ItemQ.text = ""
mssgArray = [0,0,0,0,0,0,0,0]
}
#IBAction func AddCus(_ sender: UIButton) {
}
#IBAction func SearchCus(_ sender: UIButton) {
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if(textField == CusID || textField == PhoneNum)
{
textField.keyboardType = UIKeyboardType.phonePad
}
}
}
And here is a screenshot of the two tab views and what I'm seeing, the right tab is showing the tab bar controller's controller inspector.

Why i only see the last element of array in a table view in swift 5?

I have a UI as given below and when i click save button in UI i want to add three values on top of the view to a table view, in which has three different labels for representing them and a custom structure to define the model. But my problem is that i can only append one element but what i want is to keep previously added elements in that array and show them in a tableView.
Here is the UI image
Here is the code:
MainViewController.swift
class MainViewController: UIViewController {
#IBOutlet weak var minDbLabel: UILabel!
#IBOutlet weak var averageDbLabel: UILabel!
#IBOutlet weak var maximumDbLabel: UILabel!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "saveRecord" {
let recordVC = segue.destination as! RecordTableViewController
recordVC.record.minimumValue = (minDbLabel.text! as NSString).floatValue
recordVC.record.averageValue = (averageDbLabel.text! as NSString).floatValue
recordVC.record.maximumValue = (maximumDbLabel.text! as NSString).floatValue
recordVC.recordsArray.append(recordVC.record)
}
}
#IBAction func save(_ sender: UIButton){
self.performSegue(withIdentifier: "saveRecord", sender: nil)
}
}
RecordTableViewController.swift:
class RecordCell: UITableViewCell {
#IBOutlet weak var dateLabel: UILabel!
#IBOutlet weak var minimumValueLabel: UILabel!
#IBOutlet weak var averageValueLabel: UILabel!
#IBOutlet weak var maximumValueLabel: UILabel!
}
class RecordTableViewController: UITableViewController {
let cellIdentifier: String = "cellID"
var recordsArray = [Record]()
var record: Record = Record()
override var shouldAutorotate: Bool {
return false
}
override func viewDidLoad() {
super.viewDidLoad()
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(swipeRight(_:)))
swipe.direction = .right
self.view.addGestureRecognizer(swipe)
tableView.insertRows(at: [IndexPath(row: recordsArray.count - 1, section: 0)], with: .automatic)
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return recordsArray.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RecordCell
cell.minimumValueLabel.text = "\(recordsArray[indexPath.row].minimumValue)"
cell.averageValueLabel.text = "\(recordsArray[indexPath.row].averageValue)"
cell.maximumValueLabel.text = "\(recordsArray[indexPath.row].maximumValue)"
return cell
}
}
Record.swift
struct Record {
var minimumValue: Float = .nan
var averageValue: Float = .nan
var maximumValue: Float = .nan
}
Thanks in advance.
Note: I already have searched on Google to find an answer but to no avail.
you should append the data in recordsArray in MainViewController first before performing the segue. See the code below
class MainViewController: UIViewController {
#IBOutlet weak var minDbLabel: UILabel!
#IBOutlet weak var averageDbLabel: UILabel!
#IBOutlet weak var maximumDbLabel: UILabel!
var recordsArray = [Record]()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "saveRecord" {
let recordVC = segue.destination as! RecordTableViewController
var record = Record()
record.minimumValue = Float(minDbLabel.text!) ?? 0.0
record.averageValue = Float(averageDbLabel.text!) ?? 0.0
record.maximumValue = Float(maximumDbLabel.text!) ?? 0.0
self.recordsArray.append(record)
recordVC.recordsArray = self.recordsArray
}
}
#IBAction func save(_ sender: UIButton){
self.performSegue(withIdentifier: "saveRecord", sender: nil)
}
}
Just replace your MainViewController with the code above and it should work.

Transferring data from a UITableViewCell cocoa touch class to a UIViewController class

Okay, so what I am essentially trying to do is transfer data from a UITableViewCell class to a UIViewController class. Below is my UITableViewCell:
class OrderCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
}
var post: OrderModel!
var link: Link!
var addedList: [String:Float] = [:]
#IBOutlet weak var dishName: UILabel!
#IBOutlet weak var dishDescriptionAndPrice: UILabel!
#IBOutlet weak var numberOfOrders: UILabel!
#IBOutlet weak var addOrderBtn: UIButton!
#IBOutlet weak var subtractOderBtn: UIButton!
#IBAction func addButtonPressed(sender: AnyObject) {
if numberOfOrders.text == "9" {
numberOfOrders.text = "9"
} else {
numberOfOrders.text = String((Int(numberOfOrders.text!)! + 1))
}
addedList.updateValue(post.dishPrice, forKey: post.dishName)
print(addedList)
}
#IBAction func subtractButtonPressed(sender: AnyObject) {
if numberOfOrders.text == "0" {
numberOfOrders.text = "0"
} else {
numberOfOrders.text = String((Int(numberOfOrders.text!)! - 1))
}
}
func getOrders() -> Dictionary<String, Float> {
return addedList
}
func configureCell(post: OrderModel) {
self.post = post
self.dishName.text = post.dishName
self.dishDescriptionAndPrice.text = post.dishDescription
self.numberOfOrders.text = "0"
}
}
What I am trying to do, is have my other class (which is of UIViewController), retrieve 'addedList' from the above class. I obviously cannot use prepareForSegue, and I have had no luck find a way to do this that is compatible with these two classes. I am open to creating a new class to be the "bridge" between the two and transfer the data through, but I again cannot find a way to do this. Any and all help is greatly appreciated, thank you in advance.
To get more specific, the UIViewController holds my tableview, and the class that is above is just the object file for each individual cell. I need to transfer the data when the addButtonPressed IBaction is called.
You can do this by creating a delegate in your cell class. And in your view controller class, under cell for row at indexPath, add:
cell.delegate = self
And update your cell class like this:
protocol ClassNameDelegate:class {
func addButtonAction(addedList:[String:Float])
}
#IBOutlet weak var dishName: UILabel!
#IBOutlet weak var dishDescriptionAndPrice: UILabel!
#IBOutlet weak var numberOfOrders: UILabel!
#IBOutlet weak var addOrderBtn: UIButton!
#IBOutlet weak var subtractOderBtn: UIButton!
//Create a delegate
weak var delegate: ClassNameDelegate?
#IBAction func addButtonPressed(sender: AnyObject) {
if numberOfOrders.text == "9" {
numberOfOrders.text = "9"
} else {
numberOfOrders.text = String((Int(numberOfOrders.text!)! + 1))
}
addedList.updateValue(post.dishPrice, forKey: post.dishName)
print(addedList)
// Call this when added list is done and get the call to your view controller.
if delegate != nil {
delegate?.addButtonAction(addedList: addedList)
}
}
#IBAction func subtractButtonPressed(sender: AnyObject) {
if numberOfOrders.text == "0" {
numberOfOrders.text = "0"
} else {
numberOfOrders.text = String((Int(numberOfOrders.text!)! - 1))
}
}
func getOrders() -> Dictionary<String, Float> {
return addedList
}
func configureCell(post: OrderModel) {
self.post = post
self.dishName.text = post.dishName
self.dishDescriptionAndPrice.text = post.dishDescription
self.numberOfOrders.text = "0"
}
}
Finally import this delegate method in your view controller class, in the same way you import tableView delegate and datasource.
A cell is not the good place to store information like this. You should store the information in your view controller. And when your cell button is pressed, retrieve the information thanks to the index path of the cell.
In your cell:
func configureCell(post: OrderModel, delegate:UIViewController) {
self.dishName.text = post.dishName
self.dishDescriptionAndPrice.text = post.dishDescription
self.numberOfOrders.text = "0"
self.addButton.addTarget(delegate, action: #selector(delegate.addButtonPressed(_:)), for: UIControlEvents.touchUpInside)
}
In your view controller:
//store your data in your view controller
var data=[OrderModel]()
func addButtonPressed(_ button:UIButton){
let selectedCell=button.superview?.superview? as! OrderCell
let indexPath=tableView.indexPath(for: selectedCell)
let cellData=data[indexPath!.row]
if cellData.numberOfOrders==9{
selectedCell.numberOfOrders.text="9"
}else{
selectedCell.numberOfOrders.text=String(cellData.numberOfOrders+1)
}
}

Swift delegate not working

I have a stepper in my ViewController that controls the value of a variable in my UIView. When I reset the variables to 0 in my UIView, I also want the stepper and label to reset, but they won't. I tried using a delegate, but am getting an error. Thanks in advance!
ViewController:
protocol CircleViewDelegate: class {
func updateStepper(view: CircleView)
}
class ViewController: UIViewController, CircleViewDelegate {
var colors = CircleView()
#IBOutlet weak var circleView1: CircleView!
#IBOutlet weak var blueStepper: UIStepper!
#IBOutlet weak var greenStepper: UIStepper!
#IBOutlet weak var redStepper: UIStepper!
#IBOutlet weak var redValue: UILabel!
#IBOutlet weak var greenValue: UILabel!
#IBOutlet weak var blueValue: UILabel!
var circleViewDelegate: CircleView!
override func viewDidLoad() {
super.viewDidLoad()
circleViewDelegate!.delegate = self
}
func updateStepper(view: CircleView) {
redStepper.value=0.0;
greenStepper.value=0.0;
blueStepper.value=0.0;
}
#IBAction func stepperChange(sender: UIStepper) {
circleView1.redd1 = Int(redStepper.value);
redValue.text = Int(sender.value).description;
}
#IBAction func stepperChange1(sender: UIStepper) {
circleView1.greenn1 = Int(greenStepper.value);
greenValue.text = Int(sender.value).description;
}
#IBAction func stepperChange2(sender: UIStepper) {
circleView1.bluee1 = Int(blueStepper.value);
blueValue.text = Int(sender.value).description;
}
}
UIView:
class CircleView: UIView {
var redd1 = 0
var greenn1 = 0
var bluee1 = 0
weak var delegate: CircleViewDelegate?
func updateStepper() {
delegate?.updateStepper(self)
}
func game() {
if(redd1==Int(red1) && greenn1==Int(green1) && bluee1==Int(blue1)) {
redd1 = 0;
green1 = 0;
blue1 = 0;
updateStepper()
}
}
}
Try this:
override func viewDidLoad() {
super.viewDidLoad()
circleView1.delegate = self
}
func updateStepper(view: CircleView) {
redStepper.value = 0.0
greenStepper.value = 0.0
blueStepper.value = 0.0
stepperChange(redStepper)
stepperChange(greenStepper)
stepperChange(blueStepper)
}
Instead of assigning the delegate like this circleViewDelegate!.delegate = self in viewDidLoad try circleView1.delegate = self

Swift Stepper Action that changes UITextField and UILabel within same cell

I am using a function to build my custom cell. the function used to create the cell is "makeMyList". The stepper I have successfully increments and decrements the itemQuantity textField. The trouble I am having comes with updating the "itemPrice" label. I want itemPrice.text to be quantity * price and update dynamically as the quantity either goes up or down dynamically.
Could someone possibly help me with how to get this to happen?
Thank you in advance!
class MyListTableViewCell: UITableViewCell
{
#IBOutlet weak var itemPrice: UILabel!
#IBOutlet weak var itemName: UILabel!
#IBOutlet weak var itemQuantity: UITextField!
#IBOutlet weak var stepper: UIStepper!
#IBAction func itemQuantityStepper(sender: UIStepper)
{
self.itemQuantity.text = Int(sender.value).description
}
override func awakeFromNib() {
super.awakeFromNib()
}
func makeMyList(myItem: MyList)
{
self.itemName.text = myItem.MyItemName
self.itemPrice.text = String(stepper.value * Double(myItem.MyItemPrice))
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
For anyone who has the same issue. Here is the answer to my own question.
Hope it helps!
class MyListTableViewCell: UITableViewCell
{
#IBOutlet weak var itemPrice: UILabel!
#IBOutlet weak var itemName: UILabel!
#IBOutlet weak var itemQuantity: UITextField!
#IBOutlet weak var stepper: UIStepper!
var price: Float = 0.0
var quantity: Int = 1
override func awakeFromNib() {
super.awakeFromNib()
}
func makeMyList(myItem: MyList)
{
self.itemName.text = myItem.MyItemName
self.itemPrice.text = myItem.MyItemPrice
price = Float(myItem.MyItemPrice)
}
#IBAction func itemQuantityStepper(sender: UIStepper)
{
quantity = Int(sender.value)
self.itemQuantity.text = String(quantity)
self.itemPrice.text = price * Float(quantity)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}

Resources