сохранить массив объектов под другим объектом CoreDataRelationships - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над приложением, в котором продавец может добавить группу товаров на вкладку лиц.

После выбора покупателя из табличного представления пользователь может увидеть список товаров и общую сумму, которую яхотел бы сохранить под этим именем клиентов, чтобы он пришел заплатить позже.Я провел много исследований об отношениях в CoreData, но не нашел способа сохранить много элементов одновременно.

Вот снимок экрана контроллера представления, показывающий покупателя и продукты, которые нужно добавить на его вкладку.

Добавить на вкладку контроллер представления

IМы создали модели данных, и все, и все отлично работает, просто не могу связать продукты для каждого клиента.Я хочу иметь возможность кликнуть на покупателя и увидеть все товары на его вкладке.Я провел недели, пытаясь найти ответ, и это очень расстраивает.Просто нужно иметь возможность сохранять и извлекать предметы, и мое приложение будет готово.

Очень жду ответа!

import UIKit
import MapKit
import GoogleSignIn
import CoreData

class addToTabViewController: UIViewController {

// Data Arrays
var myCart = [Cart]()
var myCartUz: [Cart] = []

var selectedIndex: Int!
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

var amount: String = ""
var transaction: String = ""

@IBOutlet weak var profilePicture: UIImageView!
@IBOutlet weak var customerName: UILabel!
@IBOutlet weak var phoneNumber: UILabel!
@IBOutlet weak var emailAddress: UILabel!
@IBOutlet weak var customerAddress: UILabel! 
@IBOutlet weak var profileView: UIView!
@IBOutlet weak var map: MKMapView!
@IBOutlet weak var receiptView: UIView!

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var customerProfile: UIImageView!
@IBOutlet weak var customerProfileView: UIView!
@IBOutlet weak var totalAmount: UILabel!
@IBOutlet weak var merchantName: UILabel!
@IBOutlet weak var merchatEmail: UILabel!

// Variable
var customers: Cutomers!

override func viewDidLoad() {
    super.viewDidLoad()

    // Show data
    configureEntryData(entry: customers)
    fetchCartData()
    totalAmount.text = amount

    // Design parameters
    hutzilopochtli()

}    

// Info profile button
@IBAction func infoButton(_ sender: Any) {
    profileView.isHidden = !profileView.isHidden
    receiptView.isHidden = !receiptView.isHidden
    customerProfileView.isHidden = !customerProfileView.isHidden
}

// Add to tab button
@IBAction func addToTabButton(_ sender: Any) {


}

// Show customer details
func configureEntryData(entry: Cutomers) {

    let name = entry.name
    let address = entry.address
    let phone = entry.phoneNumber
    let email = entry.email

    customerName!.text = name
    customerAddress!.text = address
    phoneNumber!.text = phone
    emailAddress!.text = email
    self.title = name

    let image = entry.profileicture as Data?
    profilePicture!.image =  UIImage(data: image!)
    customerProfile!.image = UIImage(data: image!)

}

// Get cart data
func fetchCartData() {

    do {
        myCart = try context.fetch(Cart.fetchRequest())
        myCartUz = myCart
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }
    } catch {

    }

    merchantName?.text = GIDSignIn.sharedInstance().currentUser.profile.name
    merchatEmail?.text = GIDSignIn.sharedInstance().currentUser.profile.email

}

// Design parameters function
func hutzilopochtli(){

profilePicture.roundMyCircle()
customerProfile.roundMyCircle()
profileView.layer.cornerRadius = 15
receiptView.layer.cornerRadius = 15
profileView.isHidden = true
map.layer.cornerRadius = 13    
}  
}

// Table view dataSource and delegates

 extension addToTabViewController: UITableViewDataSource, UITableViewDelegate {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return myCartUz.count
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "discountCell", for: indexPath) as! discountTableViewCell

    let price = myCartUz[indexPath.row].price
    let xNSNumber = price as NSNumber

    cell.productName?.text = myCartUz[indexPath.row].product
    cell.amountLabel?.text = "IDR \(xNSNumber.stringValue)"

    return cell
} 
}

Вот класс клиента

class constantCustomer: NSObject {
    private class func getContext() -> NSManagedObjectContext {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        return appDelegate.persistentContainer.viewContext

    }

class func saveObject(customerId: String, name: String, phone: String, address: String, email: String, picture: NSData) -> Bool {
    let context = getContext()
    let entity = NSEntityDescription.entity(forEntityName: "Cutomers", in: context)
    let managedObject = NSManagedObject(entity: entity!, insertInto: context)

    managedObject.setValue(customerId, forKey: "customerID")
    managedObject.setValue(NSDate(), forKey: "date")
    managedObject.setValue(name, forKey: "name")
    managedObject.setValue(phone, forKey: "phoneNumber")
    managedObject.setValue(address, forKey: "address")
    managedObject.setValue(email, forKey: "email")
    managedObject.setValue(picture, forKey: "profileicture")
    do {
        try context.save()
        return true
    } catch {
        return false
    }
}


class func fetchObject() -> [Cutomers]? {
    let context = getContext()
    var myCustomers: [Cutomers]? = nil

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Cutomers")
    let sort = NSSortDescriptor(key: "date", ascending: true)
    fetchRequest.sortDescriptors = [sort]

    do {
        myCustomers = try context.fetch(Cutomers.fetchRequest())
        return myCustomers
    } catch {
        return myCustomers
    }
}

}

1 Ответ

0 голосов
/ 01 марта 2019

Не зная о классе Customers, я могу только создать пример.Это для процесса сохранения:

func saveCustomer(entry: Customers) {
        let entity = NSEntityDescription.entity(forEntityName: "EntityName", in: viewContext)
        let customer = Customers(entity: entity!, insertInto: viewContext)

        // add data to your customer class
        customer.price = price


        for journalEntry in entry.entry {
            /// Your class with the Relationship
            let persistent = CustomersDetail(context: viewContext)
            persistent.question = journalEntry.question
            persistent.answer = journalEntry.answer
            customer.addToRelationship(persistent)
        }
        /// do saving
        do {
            try viewContext.save()
        } catch let error {
            print(error.localizedDescription)
        }
    }

загрузка Customer для определенного CostumerName:

func loadCustomerData(customerName: String) -> Customers {
    let fetch:NSFetchRequest<Customers> = Customers.fetchRequest()

    fetch.predicate = NSPredicate(format: "customerName = %@", "\(customerName)")


    var customer = [Customers]()
    do {
        customer = try viewContext.fetch(fetch)
    } catch let error {
        print(error.localizedDescription)
    }
    return customer
}

введите описание изображения здесь

...