CGSize
をUserDefaults
に格納しようとしています。サイズは幅または高さがCGFloat.infinity
です。私はNSValue
とエンコードにサイズを入れてNSKeyedArchiver
を使用して、それをデコード:NSKeyedArchiverを使用して無限次元のCGSizeをエンコードできない
let size = CGSize(width: CGFloat.infinity, height: 50)
let value = NSValue(cgSize: size)
let data = NSKeyedArchiver.archivedData(withRootObject: value)
let unarchivedValue = NSKeyedUnarchiver.unarchiveObject(with: data) as! NSValue
問題:寸法の一つが.infinity
ときにアーカイブされていないサイズが間違っている:不気味なことに、
print(size == value.cgSizeValue) // true
print(size == unarchivedValue.cgSizeValue) // false
print(size) // width: inf, height: 50.0
print(unarchivedValue.cgSizeValue) // width: 50.0, height: 0.0
注意widthは以前は高さであった値を持ちます。
同じ結果はDouble.infinity
です。
Appleにバグレポートを提出することをお勧めします。 –
します。この問題を抱えている人のために、Alexはこの関連する質問に私を指摘しました:http://stackoverflow.com/questions/17059941 – tombardey
[float INFINITYはNSCoderでアーカイブすることはできますが、デアーカイブしない]の可能な複製(https://stackoverflow.com)/questions/17059941/float-infinity-can-be-archived-by-nscoder-but-not-dearchived) –