【发布时间】:2017-10-13 13:33:04
【问题描述】:
我不明白为什么下面的代码不起作用:
import Foundation
import SpriteKit
var TestVector: CGVector = CGVector(dx: 1, dy: 1)
var Data: Dictionary<String, Any> = ["abc":CGPoint(x: 0, y: 0), "def":1, "ghi":"Try", "jkl":TestVector]
let DataConverted: Data = NSKeyedArchiver.archivedData(withRootObject: Data)
let DataReceived: Dictionary = (NSKeyedUnarchiver.unarchiveObject(with: DataConverted) as! [String : Any])
错误抛出是:错误:执行被中断,原因:信号 SIGABRT。 进程一直停留在中断点,使用“thread return -x”返回表达式求值前的状态。
对于许多不同类型的数据(String、Int、Double 等)一切正常,但不适用于向量
可以通过 NSKeyedArchiver 归档的数据类型是否有限制?
谢谢
J.
附加信息:这将用于 MultipeerConnectivy 数据传输
【问题讨论】:
-
CGPoint不应该默认不能转换成(NS)Data,所以它不能被存档。TestVector也一样。您需要使其符合NSCoder协议。 -
谢谢。然而,它适用于 CGPoint。只有 CGVector 类型会引发错误。你能说出如何使 CGPoint 和 CGVector 符合 NSCoder 协议吗?最好的语法是什么?
-
@Larme 你的意思是
NSCoding -
@LeoDabus 是的,
NSCoding。对于@jbegood:stackoverflow.com/questions/37980432/…