NSFileManager, проблема с перемещением временного загруженного файла в постоянный каталог - PullRequest
1 голос
/ 22 марта 2020

Поэтому я использую плагин, предоставленный Unity для фоновой загрузки. Этот плагин работает хорошо, за исключением фактического хранения файла.

Я не являюсь iOS разработчиком по торговле, так что, вероятно, вопрос новичка sh, но почему это не работает? Я получаю сообщение об ошибке, указывающее, что файл не существует.

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

https://github.com/Unity-Technologies/BackgroundDownload

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
    NSLog(@"Finished Download");
    //NSLog(downloadTask.taskDescription);
    NSLog(location.absoluteString);
    NSFileManager* fileManager;
    NSURL* destUri = GetDestinationUri(downloadTask.taskDescription, &fileManager);
    NSLog(destUri.absoluteString);

    NSError *error;

    Boolean success = [fileManager replaceItemAtURL: destUri withItemAtURL: location backupItemName: nil options: NSFileManagerItemReplacementUsingNewMetadataOnly resultingItemURL: nil error: &error];

    if(success)
    {
        NSLog(@"success");
    }
    else
    {
        NSLog(@"Fail %@", error);
    }

    UnityBackgroundDownload* download = [backgroundDownloads objectForKey: downloadTask];
    download.status = kStatusDone;
}

static NSURL* GetDestinationUri(NSString* dest, NSFileManager** fileManager)
{
    NSFileManager* manager = [NSFileManager defaultManager];
    NSURL* documents = [[manager URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject];
    NSURL* destUri = [documents URLByAppendingPathComponent: dest];
    if (fileManager != NULL)
        *fileManager = manager;
    return destUri;
}

1 Ответ

0 голосов
/ 22 марта 2020

На самом деле нашел это сам в конце.

Вызов GetDestinationURI в принципе не имеет смысла, так как я уже предоставил каталог, который тоже нужно сохранить со стороны Unity. Так что просто конвертируйте строку прямо в URL, а затем используйте ее.

Больше комментируйте это для всех, кто использует плагин!

...