Невозможно создать файл в указанном каталоге из-за ошибок ресурсов области безопасности в приложении iOS.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно создать файл в указанном каталоге из-за ошибок ресурсов области безопасности в приложении iOS.

Сообщение Anonymous »

Цель: пользователь выбирает папку в приложении «Файлы», в которой он будет создавать файлы. Это приложение для iOS. Этот путь к папке сохраняется в приложении iOS. Используя это приложение, пользователь создаст файл программно и сохранит его в приложении.
Проблема: по какой-то причине на основе приведенной ниже реализации я могу создать файл только один раз в этой папке, и любое последующее создание файла приводит к «Не удалось получить доступ к ресурсу области безопасности». Чтобы обойти эту проблему, мне нужно снова выбрать папку, а затем отправить ее. Это не тот опыт, с которым должен столкнуться пользователь. Пользователь должен выбрать путь к папке только один раз, и он будет сохранен в приложении iOS. Пользователь должен больше заботиться о создании файлов в этой папке.
Ниже приведен код

Код: Выделить всё

class FolderManager: NSObject, UIDocumentPickerDelegate {

// Singleton instance for shared access
static let shared = FolderManager()

private override init() {}

// Function to present the document picker for selecting a folder
func selectFolder(from viewController: UIViewController) {
let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.folder], asCopy: false)
documentPicker.delegate = self
documentPicker.allowsMultipleSelection = false
viewController.present(documentPicker, animated: true, completion: nil)
}

// Delegate method called when a folder is selected
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let selectedFolderURL = urls.first else { return }
saveFolderURL(selectedFolderURL)
}

// Function to save the folder URL as bookmark data
func saveFolderURL(_ url: URL) {
do {
let bookmarkData = try url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)
UserDefaults.standard.set(bookmarkData, forKey: "selectedFolderURL")
} catch {
print("Error saving folder URL: \(error)")
}
}

func retrieveFolderURL() -> URL? {
guard let bookmarkData = UserDefaults.standard.data(forKey: "selectedFolderURL") else { return nil }
var isStale = false
let folderURL = try? URL(resolvingBookmarkData: bookmarkData, options: [], bookmarkDataIsStale: &isStale)
if isStale {
print("Bookmark data is stale")
// Handle stale bookmark data
do {
let newBookmarkData = try folderURL?.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: nil, relativeTo: nil)
UserDefaults.standard.set(newBookmarkData, forKey: "selectedFolderURL")
} catch {
print("Error updating stale bookmark data: \(error)")
}
}
return folderURL
}

// Function to create and save a file in the selected folder
func createFileInFolder(fileName: String, fileContents: String) {
guard let folderURL = retrieveFolderURL() else {
print("Failed to retrieve folder URL")
return
}

if !folderURL.startAccessingSecurityScopedResource() {
print("Failed to access security scoped resource")
return
}
defer {
folderURL.stopAccessingSecurityScopedResource()
print("stoppedAccessingSecurityScopedResource")
}

let fileURL = folderURL.appendingPathComponent(fileName)

do {
try fileContents.write(to: fileURL, atomically: true, encoding: .utf8)
print("File created successfully at \(fileURL.path)")
} catch {
print("Error creating file: \(error)")
}
}
}
Я уже просматривал некоторые фрагменты stackoverflow, исходя из того, что код уже изменен в соответствии с startAccessingSecurityScopedResource, stopAccessingSecurityScopedResource.
Любая помощь приветствуется.
п>

Подробнее здесь: https://stackoverflow.com/questions/787 ... e-resource
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»