NSData writeToFile返回NO,没有任何错误

时间:2017-09-26 13:47:02

标签: objective-c writetofile nserror nsurlsessiondownloadtask

我知道很多话题已经存在,但它们似乎都没有启发我的问题。

我应该从服务器上的JSON请求中获取PDF文件。调用下载任务进程,但是当我尝试将NSData存储到文件时,它不会成功,但不会返回任何错误。

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {

    NSData *dataPdf = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://..."]];

    /// Get path directory
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    [[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:YES attributes:nil error:nil];

    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"msc.pdf"];
    NSLog(@"filePath: %@", filePath); /Users/.../Devices/.../Documents/msc.pdf

    NSError *error = nil;
    BOOL success = [dataPdf writeToFile:filePath options:NSDataWritingAtomic error:&error];
    if (error) {
        NSLog(@"Error:\n%@", error.localizedDescription); // -> Not called
    }
    else {
        NSLog(@"Success? %hhd", success); // -> Returns NO
    }
}

同一段代码适用于其他PDF下载(但这个更复杂,因为它涉及服务器端的一些脚本而不是直接链接)。

有没有人知道出了什么问题?

我不知道它是否能让事情变得更清楚,但我不确切地知道我是否真的得到了我应该得到的PDF文件。我所知道的是,至少有一些字节被下载(NSURLSession didWriteData返回487)应该可以在设备上写入,因为NSData不是空/零。

1 个答案:

答案 0 :(得分:0)

请确保dataPdf不是nil-我自己犯了这个错误!