首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有数组指针和快速1.2的PFSubclassing -致命错误: NSArray元素与swift数组元素类型匹配失败

具有数组指针和快速1.2的PFSubclassing -致命错误: NSArray元素与swift数组元素类型匹配失败
EN

Stack Overflow用户
提问于 2015-03-13 09:48:15
回答 4查看 1.8K关注 0票数 6

使用Swid1.2,我不再能够检索带有解析子类的poiter数组,并使用另一个解析子类向下转换它。

我总是发现错误:

代码语言:javascript
复制
fatal error: NSArray element failed to match the Swift Array Element type

你有什么主意或者可能会来吗?

守则:

代码语言:javascript
复制
import Foundation

class ShotModel : PFObject, PFSubclassing {

    /**
    * MARK: Properties
    */
    @NSManaged var name: String

    @NSManaged var pics: [PicModel]


    override class func initialize() {
        var onceToken : dispatch_once_t = 0;
        dispatch_once(&onceToken) {
            self.registerSubclass()
        }
    }

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

}

import Foundation

class PicModel : PFObject, PFSubclassing {

    /**
    * MARK: Properties
    */
    @NSManaged var name: String


    override class func initialize() {
        var onceToken : dispatch_once_t = 0;
        dispatch_once(&onceToken) {
            self.registerSubclass()
        }
    }

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

}

// this cause error

var shot: ShotModel = // a shot model get with fetchInBackgroundWithBlock

shot.pics // fatal error: NSArray element failed to match the Swift Array Element type

耽误您时间,实在对不起

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-13 12:46:03

问题来自于代码的这一部分:

代码语言:javascript
复制
override class func initialize() {
    var onceToken : dispatch_once_t = 0;
    dispatch_once(&onceToken) {
        self.registerSubclass()
    }
}

registerSubclass() for ShotModel在registerSubclass() for PicModel之前调用。

我已经在AppDelegate中解决了这个问题:

代码语言:javascript
复制
PicModel.registerSubclass()
ShotModel.registerSubclass()
票数 15
EN

Stack Overflow用户

发布于 2015-05-06 17:08:52

问题在于ShotModel在PicModel之前注册为子类。相反,我们可以将PicModel初始化称为ShotModel的初始化。

通过这种方式,我们通过解析来保留建议的解决方案,并确保类按照正确的顺序注册。

代码语言:javascript
复制
class ShotModel : PFObject, PFSubclassing {

    /**
    * MARK: Properties
    */
    @NSManaged var name: String

    @NSManaged var pics: [PicModel]


    override class func initialize() {
        var onceToken : dispatch_once_t = 0;
        dispatch_once(&onceToken) {
            PicModel.initialize()
            self.registerSubclass()
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2015-04-09 15:15:23

不知何故,在AppDelegate中注册之后,我也不得不插入对象。

代码语言:javascript
复制
PicModel.registerSubclass()
PicModel()
ShotModel.registerSubclass()
ShotModel()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29029148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档