MagicalRecord saveWithBlock 用法现在无法在 XCode 7 beta 5 下编译

Posted

技术标签:

【中文标题】MagicalRecord saveWithBlock 用法现在无法在 XCode 7 beta 5 下编译【英文标题】:MagicalRecord saveWithBlock usage now fails to compile under XCode 7 beta 5 【发布时间】:2015-08-08 21:14:25 【问题描述】:

我刚刚更新到 XCode 7 的 beta 5,现在在以下 Swift 代码中遇到编译错误:

MagicalRecord.saveWithBlock( (localContext : NSManagedObjectContext!) in
    // ... Save models here ...
    , completion:  (success : Bool, error : NSError!) in
    // ... Handle completion here ...
)

在以前的 XCode 7 版本下,编译得很好,但我现在得到:

无法使用类型为“((NSManagedObjectContext!)->(),完成:(Bool,NSError!)->())”的参数列表调用“saveWithBlock”

我尝试将-> Void(当我尝试重新添加调用时自动完成)和-> Void! 添加到参数中,但看到相同的错误。

这是 XCode 版本中的语言更改还是错误?

编辑(5.42pm ETC 08/08/2015):在没有完成处理程序的情况下调用 savedWithBlock 似乎可以编译:

MagicalRecord.saveWithBlock  (localContext: NSManagedObjectContext!) -> Void in
   // ... Save models here ...

编辑(8.32am ETC 08/11/2015):根据@Gerd Castan 的建议,我还尝试将完成参数更改为:

completion:  (success : Bool, error : ErrorType!)

completion:  (success : ObjCBool, error : ErrorType!)

两者都给出了相同的错误。

【问题讨论】:

您使用的是哪个分支/pod? (我正在研究 MagicalRecord,但我不清楚哪个分支与 Xcode 7 兼容……我猜是 3.0?) 我一直在使用 master 分支(目前为 2.3.0),它对我来说工作正常。你有问题吗? 不,还没有尝试过——做一些研究看看它在 Swift 2 环境中的工作情况,特别是因为所有文档都在 Objective C 中...... 好的,我可以推荐只使用 master,Swift 语法需要做一些翻译,但自动完成功能在这个测试版中非常好。如有任何问题,请随时通过 Twitter 联系我(链接在我的个人资料中)。 【参考方案1】:

这似乎已在 XCode 7 Beta 6 中得到修复。语法:

MagicalRecord.saveWithBlock( (localContext: NSManagedObjectContext!) -> Void in
    // Save model here
)  (success: Bool, error: NSError!) -> Void in
    // Handle result here

编译没有错误。

【讨论】:

【参考方案2】:

Apple 将 NSError 替换为 ErrorType。

将您自己显式使用的 NSError 替换为 ErrorType 以避免此类编译器错误。

【讨论】:

不幸的是,在进行更改后,我仍然看到同样的错误。 很抱歉听到这个消息。我能够通过这种方式修复几个类似的编译器错误。

以上是关于MagicalRecord saveWithBlock 用法现在无法在 XCode 7 beta 5 下编译的主要内容,如果未能解决你的问题,请参考以下文章

在并发 NSOperation (MagicalRecord-2.3) 中使用 MagicalRecord 的正确方法

MagicalRecord:后台保存

未找到 MagicalRecord/MagicalRecordDeprecationMacros.h 文件

WatchKit 和 MagicalRecord - 这可能吗?

MagicalRecord 3.0 设置

MagicalRecord 日期解析