Файл, записанный во время работы приложения в фоновом режиме, не сохраняется.IOS

Программируем под IOS
Ответить
Anonymous
 Файл, записанный во время работы приложения в фоновом режиме, не сохраняется.

Сообщение Anonymous »


Я разрабатываю приложение, которое может получать сообщения/файлы в фоновом режиме через webRTC.

Когда файл получен, я записываю его на диск. Но при попытке доступа к нему позже (даже между запусками приложений) этот файл не существует.

Папка документов пользователя имеет атрибут NSFileProtectionCompleteUntilFirstUserAuthentication.

Я пытался создать файл на диске, используя [writeToURL:options:error:], [writeToFile:options:error:] NSData. ]; [createFileAtPath:contents:attributes:] NSFileManager, а также методы NSFileHandle.

Все они успешно создают файл по указанному пути/URL-адресу. Сразу после создания я проверяю, существует ли файл с помощью [attributesOfItemAtPath:error:] NSFileManager, который показывает мне следующее:

атрибуты: { NSFileCreationDate = "2018-05-07 18:47:50 +0000"; Нсфилеекстенсионхидден = 0; NSFileGroupOwnerAccountID = 501; NSFileGroupOwnerAccountName = мобильный; NSFileModificationDate = "2018-05-07 18:47:50 +0000"; NSFileOwnerAccountID = 501; NSFileOwnerAccountName = мобильный; NSFilePosixPermissions = 420; NSFileProtectionKey = NSFileProtectionCompleteUntilFirstUserAuthentication; НСФилеференсекаунт = 1; NSFileSize = 92156; NSFileSystemFileNumber = 695101; NSFileSystemNumber = 16777219; NSFileType = NSFileTypeRegular; } [[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]] также показывает мне, что файл существует после записи.

Учитывая, что это может быть проблема с потоками, я также попытался записать этот файл, поместив его в блок основного потока, но результат тот же. Кажется, что первый файл записан, но при последующей попытке доступа к нему создается впечатление, что его никогда и не было.

Есть ли что-то, что я мог упустить?

Изменить: добавлена ​​функция, которую я использую для написания.

- (void) saveFileData:(NSData *)fileData завершениеHandler:(void(^)(BOOL успех))completionHandler { NSURL *fileURL = [собственный URL-адрес файла]; NSError * ошибка = ноль; [fileData writeToURL: параметры fileURL: ошибка NSDataWritingAtomic:&error]; если (ошибка) { ZLogError(ZLogTypeFile, @"[%@] не удалось сохранить: %@", self.fileKey, ошибка); завершениеHandler (НЕТ); возвращаться; } ZLogDebug(ZLogTypeFile, @" существует после записи:%d", fileURL, [[NSFileManager defaultManager] fileExistsAtPath:[путь к файлуURL]]); NSDictionary *attributes = [[NSFileManager defaultManager] атрибутыOfItemAtPath:[путь к файлуURL] ошибка:&error]; ZLogDebug(ZLogTypeFile, @"атрибуты: %@", атрибуты); завершениеHandler (ДА); } вывод имеет вид (где Документы — это пользователи NSDocumentDirectory в приложении)

[файл: /Documents/57/Downloads/Images/9d1687ab5f4374a2c00429a24316b5ccd3fb0a67.png] существует после записи: 1 и получение файла (изображения):

- (UIImage *) imageFromURL:(NSURL *)imageURL { BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[путь к URL-адресу изображения]]; если (!fileExists) { ZLogDebug(ZLogTypeFile, @"[файл: %@] существует: %d", imageURL, fileExists); вернуть ноль; } return [UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]]; } в журнале (обратите внимание, что я удалил длинный путь до каталога «Документы»):
[файл: /Documents/57/Downloads/Images/9d1687ab5f4374a2c00429a24316b5ccd3fb0a67.png] существует: 1
Ответить

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

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

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

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

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