我最近开始玩 iPhone 文件系统,起初我在理解一些概念时遇到了一些困难,但我认为最终我把它们弄明白了。
我的问题是我试图通过将application:openURL:sourceApplication:annotation:
方法实现到文档目录(NSDocumentDirectory
这。
BOOL
我用我的文件管理器在复制文件时返回的值创建了一个([fileManager copyItenAtPath:filePath toPath:newFilePath error:&error];
其中 newFilePath 是我的文档目录),然后检查它,然后 NSLog 如果有失败或成功,我总是会失败。
为了找出我的 Documents 目录发生了什么,我启用了文件共享,而不是看到我复制的文件,我得到了一个收件箱文件夹,在将该文件夹复制到桌面后,我看到我的文件在那里. 为什么会出现这种行为?我怎样才能得到我想要的结果?
我在 Apple 文档中的某处读到,当UIDocumentInteractionController
打开一个文件时,它会将其复制到收件箱文件夹中,但显然,我的应用程序没有使用UIDocumentInteractionController
.
提前感谢您,非常感谢您的帮助。
编辑从这里开始
这是我的原始代码:
//AppDelegate.m
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication (NSString *)sourceApplication annotation:(id)annotation
{
rootFolder.fileURLFromLaunch = url; //Passing the URL on to aproperty on a different class
[[NSNotificationCenter defaultCenter] postNotificationName:@"ApplicationDidOpenFile" object:nil]; // notifying that the URL was passed and a file was opened
return YES;
}
这是对文件进行所有工作的类:
//RootFolder.m
- (void)copyFileIntoApp
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *filePath = [fileURLFromLaunch path];
NSString *displayName = [filePath lastPathComponent];
NSError *error = NULL;
NSString *finalFilePath = [NSString stringWithFormat:@"%@/%@", documentsPath, displayName];
if ([fileManager fileExistsAtPath:finalFilePath]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"File already exists!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
} else {
BOOL success = [fileManager copyItemAtPath:filePath toPath:finalFilePath error:&error];
if (success) {
NSLog(@"success");
Document *document = (Document *) [NSEntityDescription insertNewObjectForEntityForName:@"Document" inManagedObjectContext:managedObjectContext];
[document setFilename:displayName];
[document setPath:finalFilePath];
if (![managedObjectContext save:&error]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please try again or restart the app" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
[fileArray insertObject:document atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
} else {
NSLog(@"failure %@ ", [error localizedDescription]);
}
}
}
我希望这能更清楚地说明问题。