我在尝试使用 NSFileCoordinator 的 coordinateWritingItemAtURL() 方法时遇到“额外参数”错误

Posted

技术标签:

【中文标题】我在尝试使用 NSFileCoordinator 的 coordinateWritingItemAtURL() 方法时遇到“额外参数”错误【英文标题】:I'm getting an "Extra argument" error trying to use the coordinateWritingItemAtURL() method of NSFileCoordinator 【发布时间】:2014-12-16 16:41:42 【问题描述】:

错误是:调用中的额外参数“writingItemAtURL”

我正在为 ios 开发 Swift 我在 Yosemite 上使用 Xcode 6.1.1 我尝试删除 DerivedData 并重新启动 xcode,但没有帮助。

这里有一些说明问题的操场代码:

let movingOption = NSFileCoordinatorWritingOptions.ForMoving
let replacingOption = NSFileCoordinatorWritingOptions.ForReplacing
var testURL1 = NSURL(fileURLWithPath: "file1")
var testURL2 = NSURL(fileURLWithPath: "file2")
var error1: NSErrorPointer?
var error2: NSErrorPointer?
let fc = NSFileCoordinator(filePresenter: nil)
var result = false

fc.coordinateWritingItemAtURL(testURL1, options: movingOption, writingItemAtURL: testURL2, options: replacingOption, error: &error1, byAccessor:  (newURL1: NSURL, newURL2: NSURL) in
    let fm = NSFileManager.defaultManager()
    result = fm.moveItemAtURL(newURL1, toURL: newURL2, error: error2)
    if !result 
        println("DEBUG: Failed to move file \(moveError?.localizedDescription)")
    
)

【问题讨论】:

【参考方案1】:

将最后一行替换为:

fc.coordinateWritingItemAtURL(testURL1, options: movingOption, writingItemAtURL: testURL2, options: replacingOption, error: &error1)  (newURL1: NSURL, newURL2: NSURL) -> Void in
    let fm = NSFileManager.defaultManager()
    result = fm.moveItemAtURL(newURL1, toURL: newURL2, error: error2)
    if !result 
        println("DEBUG: Failed to move file \(moveError?.localizedDescription)")

    

【讨论】:

使用该行,错误现在是“Extra argument 'options' in call” 抱歉,昨天在操场上没有显示该错误,但是今天早上打开它时,我看到了同样的错误。啊。【参考方案2】:

我发现了我的愚蠢错误。参数列表中的 URL 需要解包,因此工作代码如下所示:

let movingOption = NSFileCoordinatorWritingOptions.ForMoving
let replacingOption = NSFileCoordinatorWritingOptions.ForReplacing
var testURL1 = NSURL(fileURLWithPath: "file1")!
var testURL2 = NSURL(fileURLWithPath: "file2")!
var error1: NSError?
var error2: NSError?
let fc = NSFileCoordinator(filePresenter: nil)
var result = false

fc.coordinateWritingItemAtURL(testURL1, options: movingOption, writingItemAtURL: testURL2, options: replacingOption, error: &error1, byAccessor:  (newURL1: NSURL!, newURL2: NSURL!) in
    let fm = NSFileManager.defaultManager()
    result = fm.moveItemAtURL(newURL1, toURL: newURL2, error: &error2)
    if !result 
        println("DEBUG: Failed to move file \(error2?.localizedDescription)")
    
)

【讨论】:

以上是关于我在尝试使用 NSFileCoordinator 的 coordinateWritingItemAtURL() 方法时遇到“额外参数”错误的主要内容,如果未能解决你的问题,请参考以下文章

访问 iCloud 缩略图字典

枚举 iCloud Drive 目录

如何使用 iOS 4.3 的 iOS 5.0 方法构建应用程序?

NSFilePresenter 方法永远不会被调用

在 10.6 上测试 Mac OS X 10.7 特定代码时出现“未找到符号”崩溃

使用文件提供程序实现 UIDocumentPickerModeOpen