我想将PDF下载到我的文档目录。 我是这样做的:
- (IBAction)grabURLInBackground:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://www.test.com/test.pdf"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:[self documentsDirectory]];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSLog(@"requestFinished");
NSError *error;
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self documentsDirectory] error:&error];
if (array == nil) {
NSLog(@"array == nil");
}
NSLog(@"Array count: %d", [array count]);
}
- (NSString *)documentsDirectory {
NSArray *paths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
return [paths objectAtIndex:0];
}
但我的阵列总是空的,我不知道为什么......
它现在有效,制作了一个新项目并且有效。 有点奇怪。
答案 0 :(得分:3)
这种情况正在发生,因为编写的代码实际上是用文件替换 Documents目录,而不是将其放在Documents目录中。
如果您查看Finder中的Simulator目录(〜/ Library / Application Support / iPhone Simulator / 4.3 / Applications / ...),您会看到如下内容:
注意下载完成后,Documents目录的“Kind”不再是“Folder”而是“Document”。
如果您将.pdf附加到Finder中的Documents文件,它应该是您下载的PDF。我尝试了你的代码,这就是它为我做的。您正在下载文件目录。
如果向下载路径添加显式文件名,则代码将起作用。所以像这样:
NSString *filePath = [[[self documentsDirectory] stringByAppendingPathComponent:@"localFile"] stringByAppendingPathExtension:@"pdf"]];
[request setDownloadDestinationPath:filePath];
如果您查看example in the HTTPRequest documentation,您将看到指定了文件路径,而不仅仅是下载目录。
作为旁注,您还应该实现- (void)requestFailed:(ASIHTTPRequest *)request
委托方法,并在contentsOfDirectoryAtPath:
数组为零时(在requestFinished:
代码中)检查/打印出NSError。这样可以让您更轻松地追踪问题。
注意:确保在修复代码之前从模拟器中删除应用程序,否则当您尝试写入该文档目录时会出现错误,因为它现在不再是目录!
答案 1 :(得分:0)
我不确定你的dir
变量来自哪里,但看起来这就是你的问题所在。
您可以正确返回数组:
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self documentsDirectory] error:&error];
在我将数组分配给*array
之前,我可以正确地记录您的数据,但之后您正在使用dir
变量。也不需要分配FileManger对象,因为您可以像分配[NSFileManger defaultManager]
时一样使用*array
。
另外,当你说你的数组是空的时,你的意思是nil
并且你的数组== nil日志正在被触发,或者你正在使用[array count];
并且它返回0?