複数のプロパティを含むオブジェクトからJSON文字列ファイルを作成しました。これはオブジェクトです:
RecipeFile : Codable {
var name: String
var theRecipeIngredients: [String]
var theRecipeSteps: [String]
var theRecipeRating: Int
var theRecipeCategory: String
var theRecipeIndexStrings: String
var theRecipeImage: String?
このコードでJSON文字列ファイルを作成します。
let json_encoder = JSONEncoder()
let recipeFileName = recipeToDisplay.name! + UUID().uuidString + ".json"
let exportFilePath = getDocumentsDirectory().appendingPathComponent(recipeFileName)
do {
let jsonData = try json_encoder.encode(exportRecipeFile)
if let jsonString = String(data: jsonData, encoding: .utf8)
{
try jsonString.write(to: exportFilePath, atomically: false, encoding: .utf8)
}
} catch {
print(error.localizedDescription)
}
ICloudドライブにアップロードします。 UIDocumentPickerViewControllerを使用してiCloudドライブから文字列ファイルをインポートします。インポートしたファイルを問題なく解析できます。ただし、func documentPicker(_ controller:UIDocumentPickerViewController、didPickDocumentsAt urls:[URL])が呼び出されると、xCodeデバッグ領域にこのメッセージ(一部のパス情報を削除するように編集)が表示されます。
[DocumentManager]選択したURLファイルのサムネイルの関連付けに失敗しました:/// .... Bourbon%20Chocolate%20Walnut%20Pie18D20181-DAFD-499C-9873-7D3E0794C37A.jsonを受信ボックスのコピーファイル:///....Bourbonに関連付けることができませんでした%20Chocolate%20Walnut%20Pie18D20181-DAFD-499C-9873-7D3E0794C37A.json:Error Domain = QLThumbnail Code = 2 "(null)" UserInfo = {NSUnderlyingError = 0x149a042b0 {Error Domain = GSLibraryErrorDomain Code = 3 "Generation not found" UserInfo = {NSDescription =世代が見つかりません}}}
これが生成される原因は何ですか?
DidPickDocumentsAtコードは次のように始まります。
let data = try? Data(contentsOf: urls[0]) as Data
let json_decoder = JSONDecoder()
do {
let importRecipeFile = try json_decoder.decode(RecipeFile.self, from: data!)
let importedRecipeToSave = Recipe(context: theMOC)
importedRecipeToSave.name = importRecipeFile.name
importedRecipeToSave.category = importRecipeFile.theRecipeCategory
importedRecipeToSave.rating = Int16(importRecipeFile.theRecipeRating)
importedRecipeToSave.terms = importRecipeFile.theRecipeIndexStrings
importedRecipeToSave.addedToGroceryList = false
このメッセージは無視することができます。 iCloudからファイルをインポートすると、iOSはサムネイルをiCloudからインポートされたコピーにコピーしようとしますが、JSONファイルの場合、コピーするサムネイルがなく、これをログに記録します。これはあなたの側でエラーではありません。
親ViewControllerに子ViewControllerとして追加する前に、別のUIViewControllerからUIDocumentPickerを提示したときに、この問題が発生しました。