我正在构建一个非常简单的产品订购应用程序。 这是一个选项卡式应用程序,即产品列表,订单列表和设置。 从产品列表(从远程csv文件解析的coredata),我可以搜索然后选择一行,然后弹出一个警报视图,将所需的数量添加到文本字段,然后在" ADD" alertview中的按钮我可以将四个字符串(Productcode,Detail,Quantity(来自alertview)和条形码)转换为Order List View控制器。 这是我遇到麻烦的地方! 我可以在OrderList收到的时候在控制台中打印这四个字符串,但我仍然坚持将这些字符串传递给My NSObject模型,以便在tableviewcell的标签中显示和保存它们。 / p>
这是我的OrderProduct.swift文件:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<aside id="app-aside" class="app-aside top light">
<div class="container">
<div class="aside-menu-wrapper">
<div id="aside-top-menu-toggle" class="visible-xs-inline-block">
<button data-toggle="class" data-target="#aside-top-menu" data-class="open" self-toggle="is-active" class="hamburger hamburger--spin js-hamburger" type="button">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</button>
</div>
<ul class="sf-menu aside-menu aside-top-menu" id="aside-top-menu">
<li>
<a href="#" class="menu-link" data-module="planning">
<span class="menu-text">Planning</span>
</a>
</li>
<li>
<a href="#" class="menu-link">
<span class="menu-text">Rooms <i class="zmdi zmdi-caret-down"></i></span>
</a>
<ul>
<li><a href="#" data-module="rooms-list">List rooms</a></li>
<li><a href="#" data-module="rooms-create">Create a room</a></li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
这是我的OrderViewController.swift文件:
var app=angular.module('appName', []);
app.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
});
有人可以指导我找到我错过的东西吗?
答案 0 :(得分:0)
orderProducts
中的TestOrderViewController
属性是一个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
数组上的属性值,而不是其中的实例。它应该可能:
cell.productcodeLabel.text = orderProducts[indexPath.row].productcode //passedProductcode
cell.detailLabel.text = orderProducts[indexPath.row].detail //passedDetail
cell.quantityLabel.text = "X \(orderProducts.quantity/*passedQuantity*/)"
cell.barcodeLabel.text = orderProducts[indexPath.row].barcode //passedBarcode
但是你需要确保你的数组包含正确的模型(显然)。
好的,正如我所承诺的那样,我会尝试做一个更完整的例子。这可能不会100%符合您的要求(无论如何这对我来说都是完全清楚的),但希望它能让您顺利上路......
在实际传递值的viewController中,我建议你传递一个模型对象数组。这可能是这样的:
struct ProductModel {
var productcode: String
var detail: String
var quantity: String
var barcode: String
}
var models = [ProductModel]()
因此,您将创建ProductModel的实例并将其附加到数组中。当你准备好通过它的外观移动到下一个viewController TestOrderViewController
时,你将把整个数组传递给它(因为它将具有匹配的属性)。
这将在您推送viewController之前完成,或者在prepareForSegue中根据您处理viewControllers的方式完成。
然后在TestOrderViewController
中你会得到类似下面的内容:
// UITableViewDataSource
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return models.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("OrderCell", forIndexPath: indexPath) as! OrderTableViewCell
let model = models[indexPath.row]
cell.productcodeLabel.text = model.productcode
cell.detailLabel.text = model.detail
cell.quantityLabel.text = "X \(model.quantity)"
cell.barcodeLabel.text = model.barcode
return cell
}
答案 1 :(得分:0)
好的,所以我觉得我正在取得一些进展,但还没到那里。谢谢T. Benjamin Larsen的杰出榜样。
我在课堂外放置了我的ProductTableViewController(发送VC)
struct ProductModel {
var productcode: String
var detail: String
var quantity: String
var barcode: String
}
var models = [ProductModel]()
class ProductTableViewController: UITableViewController{
}
然后在didSelectRowAtIndexPath中我有以下内容:
var quantityTextField = UITextField()
let product = frc.objectAtIndexPath(indexPath) as! ProductItem //--> Selected cell item.
var model = models[indexPath.row] //--> fatal error: Index out of range? How do I fix this?
model.productcode = product.productcode! // --> This is the row data I want to send.
model.detail = product.detail!
model.quantity = quantityTextField.text!
model.barcode = product.barcode!
self.performSegueWithIdentifier("addProduct", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "addProduct" {
print ("Add Item Segue!")
let destination = segue.destinationViewController as! OrderViewController
destination.selected = models
}
}
在TestOrderVC中我有:
class...
var selected = models
...numberOfRowsInSection
return selected.count
...cellForRowAtIndexPath
let model = selected[indexPath.row]
cell.productcodeLabel.text = model.productcode
cell.detailLabel.text = model.detail
cell.quantityLabel.text = "X \(model.quantity)"
cell.barcodeLabel.text = model.barcode
我目前遇到致命错误。