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/MagicalRecordDeprecationMacros.h 文件