在tableView:cellForRowAtIndexPath中使用子类PFObject

时间:2015-10-22 02:44:26

标签: ios swift parse-platform

我已将PFObject分类为:

import UIKit
import Parse

class Post: PFObject, PFSubclassing {

    class func parseClassName() -> String {
        return "Post"
    }

}

在AppDelegate应用程序中注册:didFinishLaunchingWithOptions:

Post.registerSubclass()

我正在尝试在tableView中使用该类:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
    var cell = tableView.dequeueReusableCellWithIdentifier(postCellReuseIdentifier) as? PostCell
    if cell == nil {
        cell = PostCell(style: UITableViewCellStyle.Default, reuseIdentifier: postCellReuseIdentifier)
    }
    if let postCell = cell {
        // assign post to the cell
        postCell.post = object as! Post?
        // setup delegate
        postCell.delegate = self
        return postCell
    }

    return nil
}

我需要将对象转换为Post,但无法弄清楚如何。我目前收到此错误:

  

无法将'PFObject'(0x10c856ef8)类型的值转换为'MyApp.Post'(0x10c855670)。

2 个答案:

答案 0 :(得分:1)

首先,您需要通过注册实例来确保正确地为PFObject创建子类。你正在尝试的垂头丧气也是不可能的。您不能将基类的实例向下转换为派生类的实例,除非它只是存储为基类的派生实例。

答案 1 :(得分:0)

我得到了这个工作。子类需要以下内容:

将此添加到您的桥接标题中:

#import <Parse/PFObject+Subclass.h>

创建你的课程:

class MyClass: PFObject, PFSubclassing {

    static func parseClassName() -> String {
        return "MyParseClass"
    }

}

重要提示:确保parseClassName()中返回的类名与您在Parse.com上创建的类的名称完全匹配。

在AppDelegate中注册子类:application:didFinishLaunchingWithOptions:

MyClass.registerSubclass()

您现在应该能够将PFObject投射到您的班级。