以下はカスタム構造です。[details] というカスタム構造の配列を保存したかったのです。[詳細] をファイルに保存できません。この [詳細をファイルに書き込んでいるときに、アプリケーションが「無効な json 形式」でクラッシュしています。
struct details : Identifiable {
let id = UUID()
var name : String?
var time : String?
var msg : [MsgDetails]?
var loc : String?
var type : String?
}
ファイルに書き込みます: msgArray は詳細の配列です。msgArray = [詳細]。
extension Array {
var jsonStringRepresentation: String? {
let jsonData = try? JSONSerialization.data(withJSONObject: self, options: [])
guard jsonData != nil else {return nil}
let jsonString = String(data: jsonData!, encoding: .utf8)
guard jsonString != nil else {return nil}
return jsonString! as String
}
}
以下のコードでは、NSKeyedArchiver.archivedData は nil を返しています
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first{
let fileURL = dir.appendingPathComponent(self.fileName)
let data = try? NSKeyedArchiver.archivedData(withRootObject: msgArray.jsonStringRepresentation!, requiringSecureCoding: true)
do {
try data!.write(to: fileURL)
} catch let error {
print("\(error.localizedDescription)")
}
}