swift 1.2覆盖NSManagedObject扩展中的prepareForDeletion

时间:2015-04-09 01:18:08

标签: core-data nsmanagedobject swift

覆盖函数prepareForDeletion在swift 1.2中失败

// Playground - noun: a place where people can play

import UIKit
import CoreData

extension NSManagedObject {
    @objc func prepareForDeletion() {
        println("deleting object")
    }
}
  

错误:使用Objective-C选择器的方法'prepareForDeletion()'   'prepareForDeletion'与之前的声明冲突相同   Objective-C选择器

@objc func prepareForDeletion() {
           ^
  

CoreData.NSManagedObject:31:14:注意:之前的'prepareForDeletion'   在这里宣布

@objc func prepareForDeletion()

有没有人有想法?

感谢 罗恩

1 个答案:

答案 0 :(得分:1)

不能覆盖同一类扩展中的类中的方法,这样做总是未定义的行为。

对于在Swift中重写Objective-C方法,这一点未被注意到 Xcode 6.2现在已在Xcode 6.3 beta中正确诊断。

请注意Objective-C中的相应练习 - 覆盖同一类的Objective-C扩展中的方法 -  也是不允许的,请参阅  "Avoid Category Method Name Clashes"

  

如果类别中声明的方法的名称与方法相同   在原始类中,或在另一个类别中的方法相同   class(甚至是超类),行为未定义为哪个   方法实现在运行时使用。这不太可能是一个   如果您使用自己的类别的类别,但可能导致问题   使用类别将方法添加到标准Cocoa或。时的问题   Cocoa Touch课程。

您可以做的是覆盖自定义中的方法 NSManagedObject 子类