【问题标题】:Restkit and deletion of orphaned objects in swift 3swift 3中的Restkit和孤立对象的删除
【发布时间】:2016-09-24 12:35:31
【问题描述】:

在上次更新 XCode 后,它建议我将代码更新为 swift 3 语言。 XCode 帮助我进行了更新,在我修复了一些需要手动更新的内容后,我遇到了一个我不知道该怎么做的转换。

这是关于在 Restkit 中删除孤立对象的。以下是 XCode 为将 swift 2 更新为 swift 3 生成的代码:

        // fetchRequestBlock to delete orphaned objects ------ tmenus --------
    manager?.addFetchRequest { (url:URL!) -> NSFetchRequest<AnyObject>! in
        let pathMatcher = RKPathMatcher(pattern: config.getDataPath)
        let match = pathMatcher.matchesPath(url.relativePath, tokenizeQueryStrings: false, parsedArguments: nil)
        guard match else {
            return nil
        }
        let fetchRequest = NSFetchRequest(entityName: "TipoMenuEntity")
        return fetchRequest
    }

以及它显示的错误:

/Users/mast/work/gColegios/iOSapp/gColegios/AppDelegate.swift:417:34: Cannot convert value of type '(URL!) -> <<error type>>' to expected argument type '((URL?) -> NSFetchRequest<NSFetchRequestResult>?)!'

所以我在 swift 3 中使用管理请求的新方法更新了代码:

// fetchRequestBlock to delete orphaned objects ------ tmenus --------
    manager?.addFetchRequest { (url:URL!) -> NSFetchRequest<TipoMenu>! in
        let pathMatcher = RKPathMatcher(pattern: config.getDataPath)
        let match = pathMatcher.matchesPath(url.relativePath, tokenizeQueryStrings: false, parsedArguments: nil)
        guard match else {
            return nil
        }
        let fetchRequest: NSFetchRequest<TipoMenu> = TipoMenu.fetchRequest()
        return fetchRequest
    }

现在它显示新错误:

/Users/mast/work/gColegios/iOSapp/gColegios/AppDelegate.swift:418:34: Cannot convert value of type '(URL!) -> NSFetchRequest<TipoMenu>!' to expected argument type '((URL?) -> NSFetchRequest<NSFetchRequestResult>?)!'

我已经尝试了所有方法:更改 '(URL!) -> NSFetchRequest!'通过'((URL?)-> NSFetchRequest?)!' , 以及 ? 之间的各种组合?还有!

谁能帮我解决这个问题?

提前致谢

【问题讨论】:

  • 参数和返回都应该是可选的

标签: ios xcode restkit swift3


【解决方案1】:

嗯,原来是正确的代码

       // fetchRequestBlock to delete orphaned objects ------ tmenus --------
    manager?.addFetchRequest { (url:URL?) -> NSFetchRequest<NSFetchRequestResult>? in
        let pathMatcher = RKPathMatcher(pattern: config.getDataPath)
        if let match = pathMatcher?.matchesPath(url?.relativePath, tokenizeQueryStrings: false, parsedArguments: nil)
        {
            if (match)
            {
                let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "TipoMenuEntity")
                return fetchRequest
            }
        }
        return nil
    }

让我感到困惑的是,在其他请求中,有必要将 NSFetchRequest 用于创建请求,因为显然使用 swift 3 NSManagedObject 类扩展了代码以符合 NSFetchRequest 的委托。

但是,这里只是 XCode 完成的函数的标头,以使其适应 swift 3。所以它只是放置正确的标头并将代码适应此版本的新选项。

感谢 New16 将我带到这里。

【讨论】:

    【解决方案2】:

    错误基本上说它正在等待NSFetchRequestResult。例如NSAsynchronousFetchResult 的结果。您正在使用请求。

    【讨论】:

    • 您能再解释一下吗?
    • 使用NSAsynchronousFetchResult 而不是TipoMenu。类型检查失败,我认为您的TipoMenu 是NSManagedObject 的子类。使用NSFetchRequestResult 的任何子类。
    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多