1

我想快速归档和取消归档自定义对象,如下所示:

class Line : NSObject, NSCoding  {

    var start : CGPoint


    init(start _start: CGPoint) {
        start = _start
    }

    required init(coder aDecoder: NSCoder) {
        // 1 - compile time error
        self.start = aDecoder.decodeObjectForKey("start") as CGPoint
    }

    override init() {
    }

    func encodeWithCoder(aCoder: NSCoder) {
        // 2 - compile time error
        aCoder.encodeObject(start, forKey: "start")
    }
}

1.编译时错误为:Type 'CGPoint' does not conform to protocol 'AnyObject'

2.编译时错误是:Extra argument 'forKey' in call

如何归档和取消归档 CGPoint,我知道 CGPoint 很受打击,这就是问题所在,但如何解决呢?

提前致谢。

4

3 回答 3

5

您可以使用以下命令归档/取消归档 CGPoint:

encodeCGPoint:forKey:

decodeCGPointForKey:

更多信息在这里:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCoder_Class/index.html#//apple_ref/occ/instm/NSCoder/encodeCGPoint:forKey:

于 2015-02-03T09:50:23.160 回答
1

也许您可以将 CGPoint 转换为 NSValue。

func encodeWithCoder(aCoder: NSCoder) {
    var cgPointAsObject:NSValue = NSValue(CGPoint: start)
    aCoder.encodeObject(cgPointAsObject, forKey: "start")
}

类似的反向过程在解码时将 NSValue 转换为 CGpoint。

于 2015-02-03T09:57:06.377 回答
0

swift3一些func改变,这样做:

class UserModel: NSObject,NSCoding {

var username:String = ""
var password: Int = 0

required init(coder aDecoder: NSCoder) {
    super.init()

}

override init() {

}

func encode(with aCoder: NSCoder) {

    }

}
于 2016-11-11T07:13:01.267 回答