Я пишу процедуру, чтобы проверить, существует ли файл, и если да, предупредить пользователя и спросить, нужно ли мне перезаписать.Я получаю то, что для меня странное поведение.
Вот мой код для записи файла.
if let jsonToSave = myFile.json {
var shouldIOverwrite: Bool = false
if let url = try? FileManager.default.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true
).appendingPathComponent(name + ".json"){
do {
print("place 1: \(shouldIOverwrite)")
shouldIOverwrite = presentOverwriteWarning(for: url, fName: name)
print("place 2: \(shouldIOverwrite)")
if shouldIOverwrite {
try jsonToSave.write(to: url)
print("saved successfully")
}
} catch let error {
print("couldn't save \(error)")
}
}
}
Вот функция, которая устанавливает и представляет предупреждение:
private func presentOverwriteWarning(for url: URL?, fName: String) -> Bool {
var overwrite: Bool = false
let alert = UIAlertController(
title: "File for \"" + fName + "\" exists",
message: "Do you want to overwrite it?",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(
title: "Yes",
style: .default,
handler: { action in
overwrite = true
}
))
alert.addAction(UIAlertAction(
title: "No",
style: .default,
handler: { action in
overwrite = false
}
))
present(alert, animated: true)
return overwrite
}
Я возвращаю перезаписать значение Bool.Обратите внимание, у меня есть две команды печати «место 1» и «место 2».Когда я отлаживаю, я вижу, что 2 отпечатка уже перечислены в выводе как ложные, прежде чем мое предупреждение появится на моем экране, прежде чем оно ответит.Так что мое «если перезаписать» всегда ложно.Я что-то упустил в своем предупреждении?
Примечание: вы увидите, что нет кода, чтобы проверить, существует ли файл еще.Для отладки я всегда вызываю оповещение.