将 PFObject 转换为 cellForRowAtIndexPath 中的子类时的空值
empty value on cast PFObject to subclass in cellForRowAtIndexPath
我在将 PFObject 转换为名为 "Customer"
的自定义 class 时遇到问题
这是 class
的 swift 文件
@objc class Customer: PFObject, PFSubclassing {
@NSManaged var CompanyName: String
@NSManaged var City: String
@NSManaged var CountryCode: String
@NSManaged var Address: String
@NSManaged var Prov: String
@NSManaged var Email: String
@NSManaged var Vat: String
@NSManaged var PaymentDelay: String
@NSManaged var ficId: String
@NSManaged var owner: Owner
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken){
self.registerSubclass()
}
}
static func parseClassName() -> String {
return "Customer"
}
}
这是 tableViewDelegate
@objc class CustomersViewController: PFQueryTableViewController {
override func queryForTable() -> PFQuery {
let query = PFQuery(className: "Customers")
query.orderByAscending("CompanyName")
query.includeKey("owner")
return query
}
override func objectsDidLoad(error: NSError?) {
super.objectsDidLoad(error)
//print("\(objects?.count) customers")
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cell = cellForTableView(tableView)
print("obj:\(object?.objectId)")
if let customer = object as? Customer {
print("customer")
let customerLabel = cell.viewWithTag(101) as! UILabel
customerLabel.text = customer.CompanyName
}
return cell;
}
func cellForTableView(tableView: UITableView) -> PFTableViewCell{
let cellIdentifier = "CustomerCell"
if let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? PFTableViewCell{
return cell
} else {
return PFTableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
}
}
}
问题是这段代码永远不会执行...为什么?
if let customer = object as? Customer {
print("customer")
let customerLabel = cell.viewWithTag(101) as! UILabel
customerLabel.text = customer.CompanyName
}
这是我的错误还是 PFSubclassing 协议的错误?
日志显示对象已正确下载..这是一个包装问题?
obj:Optional("uZ1v4VTFnt")
obj:Optional("ciCOtYFMif")
obj:Optional("P43mV63o0l")
obj:Optional("YhMWMkklwZ")
obj:Optional("LtKxwHApKZ")
obj:Optional("EXL5tEW9EI")
obj:Optional("I9HoCWqYub")
谢谢
查看 class 名称不匹配
static func parseClassName() -> String {
return "Customer"
}
let query = PFQuery(className: "Customers")
在查询中您使用的是 class name Customers,而在解析中您使用的是 class name 您返回的是 Customer
此外,正如我在评论中提到的,您必须在应用程序委托中初始化解析对象
我在将 PFObject 转换为名为 "Customer"
的自定义 class 时遇到问题这是 class
的 swift 文件 @objc class Customer: PFObject, PFSubclassing {
@NSManaged var CompanyName: String
@NSManaged var City: String
@NSManaged var CountryCode: String
@NSManaged var Address: String
@NSManaged var Prov: String
@NSManaged var Email: String
@NSManaged var Vat: String
@NSManaged var PaymentDelay: String
@NSManaged var ficId: String
@NSManaged var owner: Owner
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken){
self.registerSubclass()
}
}
static func parseClassName() -> String {
return "Customer"
}
}
这是 tableViewDelegate
@objc class CustomersViewController: PFQueryTableViewController {
override func queryForTable() -> PFQuery {
let query = PFQuery(className: "Customers")
query.orderByAscending("CompanyName")
query.includeKey("owner")
return query
}
override func objectsDidLoad(error: NSError?) {
super.objectsDidLoad(error)
//print("\(objects?.count) customers")
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cell = cellForTableView(tableView)
print("obj:\(object?.objectId)")
if let customer = object as? Customer {
print("customer")
let customerLabel = cell.viewWithTag(101) as! UILabel
customerLabel.text = customer.CompanyName
}
return cell;
}
func cellForTableView(tableView: UITableView) -> PFTableViewCell{
let cellIdentifier = "CustomerCell"
if let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? PFTableViewCell{
return cell
} else {
return PFTableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
}
}
}
问题是这段代码永远不会执行...为什么?
if let customer = object as? Customer {
print("customer")
let customerLabel = cell.viewWithTag(101) as! UILabel
customerLabel.text = customer.CompanyName
}
这是我的错误还是 PFSubclassing 协议的错误?
日志显示对象已正确下载..这是一个包装问题?
obj:Optional("uZ1v4VTFnt") obj:Optional("ciCOtYFMif") obj:Optional("P43mV63o0l") obj:Optional("YhMWMkklwZ") obj:Optional("LtKxwHApKZ") obj:Optional("EXL5tEW9EI") obj:Optional("I9HoCWqYub")
谢谢
查看 class 名称不匹配
static func parseClassName() -> String {
return "Customer"
}
let query = PFQuery(className: "Customers")
在查询中您使用的是 class name Customers,而在解析中您使用的是 class name 您返回的是 Customer
此外,正如我在评论中提到的,您必须在应用程序委托中初始化解析对象