Xcode 如何在swift中使用string提取
我只是想知道如何使用Swift中的核心数据,使用搜索到的条形码获取数据。我基本上是将条形码传递给一个Xcode 如何在swift中使用string提取,xcode,swift,core-data,nsmanagedobject,nsfetchrequest,Xcode,Swift,Core Data,Nsmanagedobject,Nsfetchrequest,我只是想知道如何使用Swift中的核心数据,使用搜索到的条形码获取数据。我基本上是将条形码传递给一个static func方法,但是如何使用它从核心数据中获取数据呢 以下是检测到的条形码: func barcodeDetected(code: String) { // Let the user know we've found something. let alert = UIAlertController(title: "Found a Barcode!", message
static func
方法,但是如何使用它从核心数据中获取数据呢
以下是检测到的条形码:
func barcodeDetected(code: String) {
// Let the user know we've found something.
let alert = UIAlertController(title: "Found a Barcode!", message: code, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Search", style: UIAlertActionStyle.Destructive, handler: { action in
// Remove the spaces.
let trimmedCode = code.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
// EAN or UPC?
// Check for added "0" at beginning of code.
let trimmedCodeString = "\(trimmedCode)"
var trimmedCodeNoZero: String
if trimmedCodeString.hasPrefix("0") && trimmedCodeString.characters.count > 1 {
trimmedCodeNoZero = String(trimmedCodeString.characters.dropFirst())
// Send the doctored barcode
ProductDetailsViewController.searchCode(trimmedCodeNoZero)
} else {
// Send the doctored barcode
ProductDetailsViewController.searchCode(trimmedCodeString)
}
self.navigationController?.popViewControllerAnimated(true)
}))
self.presentViewController(alert, animated: true, completion: nil)
}
我的产品类别:
import UIKit
import Foundation
import CoreData
class ProductDetailsViewController: UIViewController, NSFetchedResultsControllerDelegate {
@IBOutlet weak var productLabel: UILabel!
@IBOutlet weak var priceLabel: UILabel!
@IBAction func addProduct(sender: AnyObject) {
let AppDel = UIApplication.sharedApplication().delegate as? AppDelegate
let context:NSManagedObjectContext = (AppDel?.managedObjectContext)!
let ent = NSEntityDescription.entityForName("Products", inManagedObjectContext: context)
var newProduct = ProductItem(entity: ent!, insertIntoManagedObjectContext: context)
newProduct.title = productLabel.text
//newProduct.price = priceLabel.text
/*context.save(nil)
print(newProduct)
print("Object Saved")*/
}
private(set) var PRODUCT_NAME = ""
private(set) var PRODUCT_PRICE = ""
private var menuItems:[ProductItem] = []
static func searchCode(codeNumber: String) -> String{
let barcodeNumber = codeNumber
return barcodeNumber
}
deinit{
NSNotificationCenter.defaultCenter().removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
productLabel.text = "Scan a Product"
priceLabel.text = ""
NSNotificationCenter.defaultCenter().addObserver(self, selector: "setLabels:", name: "ProductNotification", object: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我已经成功地将项目添加到核心数据中,并且能够将所有项目加载到我的应用程序中的表中。现在,随着条形码扫描,我希望能够加载带有条形码的产品,我被卡在了那个零件上。正如您所看到的,我的静态趣味搜索代码正在接收来自barcodeDetected的条形码,但我接下来应该如何获取它?谢谢
编辑:
核心数据实体
import Foundation
import CoreData
@objc(ProductItem)
class ProductItem: NSManagedObject{
@NSManaged var barcodeNum:String?
@NSManaged var box_height:NSNumber?
@NSManaged var box_length:NSNumber?
@NSManaged var box_width:NSNumber?
@NSManaged var price:NSNumber?
@NSManaged var sku:String?
@NSManaged var weight:NSNumber?
@NSManaged var title:String?
}
要获取正确的
ProductItem
,需要使用谓词(请参阅Apple文档)。在您的情况下,您可以使用以下内容:
let AppDel = UIApplication.sharedApplication().delegate as? AppDelegate
let context:NSManagedObjectContext = (AppDel?.managedObjectContext)!
let fetchRequest = NSFetchRequest(entityName: "ProductItem")
fetchRequest.predicate = NSPredicate(format: "barcodeNum == %@",codeNumber)
let results = try! context.executeFetchRequest(fetchRequest) as! [ProductItem]
if results.count > 0 { // great, you found (at least one) matching item
let scannedProduct = results[0]
// from here you can access the attributes of the product
// such as title, price, sku, etc.
...
} else { // not found
...
}
请注意,我使用了try为了简洁起见,您应该使用适当的do。。。捕获
语法并处理任何错误
我不清楚您为什么在产品详细信息viewcontroller
中使用静态func;常见的方法是在barcodeDetected
方法中使用上述提取,然后转到ProductDetailsViewController
传递相关的ProductItem
以进行显示/编辑或其他操作。或者,如果找不到产品,则显示警报视图。要获取正确的ProductItem
,需要使用谓词(请参阅Apple文档)。在您的情况下,您可以使用以下内容:
let AppDel = UIApplication.sharedApplication().delegate as? AppDelegate
let context:NSManagedObjectContext = (AppDel?.managedObjectContext)!
let fetchRequest = NSFetchRequest(entityName: "ProductItem")
fetchRequest.predicate = NSPredicate(format: "barcodeNum == %@",codeNumber)
let results = try! context.executeFetchRequest(fetchRequest) as! [ProductItem]
if results.count > 0 { // great, you found (at least one) matching item
let scannedProduct = results[0]
// from here you can access the attributes of the product
// such as title, price, sku, etc.
...
} else { // not found
...
}
请注意,我使用了try为了简洁起见,您应该使用适当的do。。。捕获
语法并处理任何错误
我不清楚您为什么在产品详细信息viewcontroller
中使用静态func;常见的方法是在barcodeDetected
方法中使用上述提取,然后转到ProductDetailsViewController
传递相关的ProductItem
以进行显示/编辑或其他操作。或在未找到产品时显示警报视图。有人需要帮助吗?非常感谢,谢谢。您能显示您的实体的详细信息吗?不清楚哪个属性将包含条形码。还要澄清视图控制器层次结构-哪个VC是您的第一个代码?从CoreData获取相关对象后,您想做什么?我用我的Core Data实体编辑了它。包含条形码的属性是barcodeNum。此外,一旦提取了barcodeNum对象,我希望能够显示与条形码相关的所有其他属性。但我的问题是,一旦条形码从我的ViewController扫描并传递到我的ProductsViewController,我就陷入了下一步该做什么的困境@有人帮忙吗?非常感谢,谢谢。您能显示您的实体的详细信息吗?不清楚哪个属性将包含条形码。还要澄清视图控制器层次结构-哪个VC是您的第一个代码?从CoreData获取相关对象后,您想做什么?我用我的Core Data实体编辑了它。包含条形码的属性是barcodeNum。此外,一旦提取了barcodeNum对象,我希望能够显示与条形码相关的所有其他属性。但我的问题是,一旦条形码从我的ViewController扫描并传递到我的ProductsViewController,我就陷入了下一步该做什么的困境@非常感谢你!这很有道理,但我之所以有一个静态func,是因为以前我没有使用核心数据,而且.CSV文件中的所有内容都是元组数组。但我仍然在学习核心数据@pbasdft非常感谢!这很有道理,但我之所以有一个静态func,是因为以前我没有使用核心数据,而且.CSV文件中的所有内容都是元组数组。但我仍然在学习核心数据,正如我在@pbasdf中所做的一样