可可中的copyItemAtURL
Posted
技术标签:
【中文标题】可可中的copyItemAtURL【英文标题】:copyItemAtURL in Cocoa 【发布时间】:2012-05-24 03:09:50 【问题描述】:我正在尝试制作一个非常简单的带有用户界面的 rsync 程序。我所需要的只是能够拖放两个文件路径,以便将一个复制到另一个。现在我只是想把我桌面上的一个文件复制到桌面上的一个文件夹中,这甚至行不通。我正在使用标题为“源”和“目标”的文本字段来删除我拖入其中的文件路径。我有以下代码:
#import "AppController.h"
@implementation AppController
@synthesize source = _source, destination = _destination;
-(IBAction)sync:(id)sender
NSFileManager *manager = [[NSFileManager alloc] init];
//NSURL *source = [NSURL fileURLWithPath:@"/Users/crashprophet/Desktop/Time Out Tot Schedule.doc"];
// NSURL *destination = [NSURL fileURLWithPath:@"/Users/crashprophet/Desktop/untitled f older 2"];
NSURL *source = [NSURL URLWithString:self.source.stringValue];
NSURL *destination = [NSURL URLWithString:self.destination.stringValue];
[manager copyItemAtURL:source toURL:destination error:nil];
NSLog(@"The source path is %@ and the destation path is %@",source, destination);
NSLog(@"Got here!");
@end
有什么想法吗?
【问题讨论】:
NSLog 你的self.source.stringValue
和self.destination.stringValue
以确保它们是正确的。另外,创建一个错误对象并将其放入copyItemAtURL:toURL:error:
,然后检查它返回的内容。
然后决定你是想要fileURLWithPath:
(在你的注释掉的代码中)还是URLWithString:
(在你的真实代码中)。如果文本字段包含路径,则需要fileURLWithPath:
。
【参考方案1】:
如果您的字符串看起来像您的 cmets 中的字符串,您需要使用 fileURLWithPath:。此外,目标路径不能只是一个文件夹,它的末尾需要一个文件名——您可以使用与原始文件名相同的文件名,也可以给它一个新的文件名。从您使用的复制方法的文档中:
"dstURL 放置 srcURL 副本的 URL。此参数中的 URL 不能是文件引用 URL,并且必须在新位置包含文件名。此参数不能为 nil。”
【讨论】:
以上是关于可可中的copyItemAtURL的主要内容,如果未能解决你的问题,请参考以下文章
出现错误 - (BOOL)copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL 错误:(NSError **)error