gpt4 book ai didi

iphone - 将文件复制到文档目录导致失败

转载 作者:行者123 更新时间:2023-11-28 23:17:47 25 4
gpt4 key购买 nike

我最近开始研究 iPhone 文件系统,起初我在理解一些概念时遇到了一些困难,但我认为最终我把它们弄得一清二楚。

我的问题是我试图通过实现 application:openURL:sourceApplication:annotation: 方法添加到文档目录 (NSDocumentDirectory),但我的应用程序似乎在执行此操作时失败。

我创建了一个 BOOL,其中包含我的文件管理器在复制文件时返回的值([fileManager copyItenAtPath:filePath toPath:newFilePath error:&error]; 其中 newFilePath 是我的文档目录)然后检查它,然后 NSLog 如果有失败或成功,我总是失败。

为了找出我的文档目录发生了什么,我启用了文件共享,但我没有看到我复制的文件,而是看到了一个收件箱文件夹,在将该文件夹复制到桌面后,我看到了我的文件在那里。为什么会出现这种行为?我怎样才能得到我想要的结果?

我在 Apple 文档的某处读到,当 UIDocumentInteractionController 打开一个文件时,它会将它复制到 Inbox 文件夹,但显然,我的应用程序没有使用 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]);
}


}

我希望这能让事情更清楚。

最佳答案

I get an Inbox folder, and upon copying that folder to the Desktop I see that my files are in there. Why is this behavior? How can I get the result that I want?

因为您的应用是沙盒化的,无法访问不在其自身目录中的文件。当用户告诉 iOS 他想用特定应用程序打开文件时,iOS 会将文件复制到收件箱目录中。


贴出application:openURL:sourceApplication:annotation:的完整代码。
你的“我正在做这个做那个”并不是很有帮助,因为这个和那个之间存在缺陷。你用你的话解释的算法是正确的,但你的实现显然有一个错误。

所以请贴出这个方法的完整代码。


编辑:我测试了您代码的相关部分,它们似乎可以正常工作。

我会检查 fileManager 是否为零。这可以解释为什么您看不到错误消息。

关于iphone - 将文件复制到文档目录导致失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com