아주 간단한 제품 주문 응용 프로그램을 구축 중입니다. 이 탭된 응용 프로그램, 제품 목록, 주문 목록 및 설정입니다. 제품 목록 (원격 csv 파일에서 구문 분석 한 coredata)에서 검색 한 다음 행을 선택한 다음 원하는 양을 텍스트 필드에 추가 한 경고보기를 표시 한 다음 alertview의 "ADD"단추를 클릭하여 네 개의 문자열 Productcode, Detail, Quantity (alertview에서) 및 바코드)를 Order List View 컨트롤러에 전송합니다. 여기가 문제가있는 곳입니다! OrderList에 의해 수신되는 시점에 콘솔에 네 개의 문자열을 인쇄 할 수는 있지만 이러한 문자열을 내 NSObject 모델에 전달하여 tableviewcell의 레이블에 표시하고 유지할 수있는 방법이 필요합니다.다른 tableviewcontroller에서받은 문자열을 전달하십시오.
import Foundation
import UIKit
class OrderProduct: NSObject, NSCoding {
var uuid: String = NSUUID().UUIDString
var productcode:String = ""
var detail:String = ""
var quantity:String = ""
var barcode:String = ""
var inOrderList = false
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(uuid, forKey: "uuid")
coder.encodeObject(productcode, forKey: "productcode")
coder.encodeObject(detail, forKey: "detail")
coder.encodeObject(quantity, forKey: "quantity")
coder.encodeObject(barcode, forKey: "barcode")
coder.encodeBool(inOrderList, forKey: "inOrderList")
}
required init?(coder decoder: NSCoder) {
super.init()
if let archivedUuid = decoder.decodeObjectForKey("uuid") as? String {
uuid = archivedUuid
}
if let archivedProductcode = decoder.decodeObjectForKey("productcode") as? String {
productcode = archivedProductcode
}
if let archivedDetail = decoder.decodeObjectForKey("detail") as? String {
detail = archivedDetail
}
if let archivedQuantity = decoder.decodeObjectForKey("quantity") as? String {
quantity = archivedQuantity
}
if let archivedBarcode = decoder.decodeObjectForKey("barcode") as? String {
barcode = archivedBarcode
}
inOrderList = decoder.decodeBoolForKey("inOrderList")
}
init(productcode: String, detail: String, quantity: String, barcode: String) {
super.init()
self.productcode = productcode
self.detail = detail
self.quantity = quantity
self.barcode = barcode
}
}
그리고 여기 내 OrderViewController.swift 파일입니다 :
import Foundation
import UIKit
//MARK: - Class
class TestOrderViewController: UITableViewController{
required init?(coder decoder: NSCoder) {
//print("init OrderViewController")
super.init(coder: decoder)
loadOrderProducts()
}
deinit {
}
//MARK: - Product Vars
var passedProductcode = String() //String is recieved here!
var passedDetail = String() //String is recieved here!
var passedQuantity = String() //String is recieved here!
var passedBarcode = String() //String is recieved here!
var orderProducts = [OrderProduct]() //My Object model...
//MARK: - ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
title = "Order List"
orderProducts.productcode = passedProductcode //Trying to pass them but
orderProducts.detail = passedDetail //errors with "Value of type
orderProducts.quantity = passedQuantity //'[OrderProduct]' has no
orderProducts.barcode = passedBarcode //member 'productcode'?
tableView.estimatedRowHeight = 80.0
tableView.rowHeight = UITableViewAutomaticDimension
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// Return the number of sections.
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of rows in the section.
return orderProducts.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("OrderCell", forIndexPath: indexPath) as! OrderTableViewCell
let orderProduct = orderProducts[indexPath.row]
cell.productcodeLabel.text = orderProduct.productcode
cell.detailLabel.text = orderProduct.detail
cell.quantityLabel.text = "X \(orderProduct.quantity)"
cell.barcodeLabel.text = orderProduct.barcode
return cell
}
private func loadOrderProducts() {
if let filePath = pathForOrderProducts() where NSFileManager.defaultManager().fileExistsAtPath(filePath) {
if let archivedOrderProducts = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? [OrderProduct] {
orderProducts = archivedOrderProducts
}
}
}
private func pathForOrderProducts() -> String? {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
if let documents = paths.first, let documentsURL = NSURL(string: documents) {
return documentsURL.URLByAppendingPathComponent("orderProducts.plist").path
}
return nil
}
private func saveOrderProducts() {
if let filePath = pathForOrderProducts() {
NSKeyedArchiver.archiveRootObject(orderProducts, toFile: filePath)
}
}
}
누군가가 나에게이 가이드 시겠어요 내가 놓친 거지 여기에서
내 OrderProduct.swift 파일입니다? 당신은 당신은 오히려 내부의 경우보다 더OrderProduct
의 배열에 재산-값을 검색하려고 시도하고
cell.productcodeLabel.text = orderProducts.productcode //passedProductcode
cell.detailLabel.text = orderProducts.detail //passedDetail
cell.quantityLabel.text = "X \(orderProducts.quantity/*passedQuantity*/)"
cell.barcodeLabel.text = orderProducts.barcode //passedBarcode
을 할 때
는 orderProduct = orderProducts [indexPath.row] cell.productcodeLabel.text = orderProduct.productcode cell.detailLabel.text = orderProduct.detail cell.quantityLabel.text = "X \ (orderProduct.quantity)" 하자 cell.barcodeLabel.text = orderProduct.barcode –
감사합니다. T.Benjamin Larsen, 제 문제는 실제로 변수를 객체에 처음 전달하는 것과 같습니다. 예 : passedProductcode = String() orderProducts.productcode로 가져 오려면 어떻게해야합니까? –
수 없습니다. 'orderProducts'는'OrderProduct'의 _an 배열입니다.이 속성에는 이러한 속성이 없습니다. 배열에 전체 OrderProductInstance를 추가해야 할 수도 있습니다. 내 눈에는 그 '통과 ...'속성이 그다지 의미가없는 것처럼 보입니다. –