objective-c - 无法在swift中继承NSMangedObject类型的 objective-c 类

标签 objective-c swift core-data

我有一个父类base,它继承NSMangedObject。 (base 类没有与之关联的实体。它仅包含公共(public)属性和方法)。我有多个子类,其中很少有关联的实体,并且很少只使用 base 类中的常用方法。很少有子类使用 Obj-c 语言,也很少使用 swift 语言,所有这些都扩展了 base 类。

我的base是在obj c lang中。 child1 类位于 swift 中,当我初始化它并尝试访问其中的属性时,它会给出错误的访问错误。

然后我创建了空实体 test 并在 obj c 中创建了子类并在 child1 中继承,它给出了相同的错误,但是当我在 swift 中创建子类并继承时有效。

是否存在 obj c 中 NSMangedObject 的子类不能在 swift 中继承的限制?

编辑

代码-

Base.h文件

@interface Base : NSManagedObject

@property (nonatomic, retain) NSNumber *property1;
@property (nonatomic,strong)  NSString *property2;

@end

Base.m文件

@implementation Base 

@synthesize property1;
@synthesize property2;

@end

Child1.swift 文件

@objc class Child1: Base {

   var list = Child2()
   var array : [String] = []


   @objc static let sharedInstance: Child1 =  Child1()

   @objc class func filterSharedInstance()-> Child1{
       return Child1.sharedInstance;
   }


   @objc func loadData(_ completionBlock: CompletionBlock?) {
       if array.contains("Test"){
          return
       }
       // some code
    }

}

在某些 obj c 类中

Child1 *instance = [Child1 sharedInstance];
[instance loadData:nil];

调用上述函数后,由于array未初始化,if array.contains("Test"){行出现错误EXC_BAD_ACCESS

当对 Swift 中的基类进行同样的操作时,它可以工作。

最佳答案

根本问题是 Child1 继承自 NSManagedObject,而您正在创建一个如下所示的实例:

@objc static let sharedInstance: Child1 =  Child1()

在 Swift 或 Objective C 中,您无法像这样初始化托管对象,因为您没有调用 NSManagedObject 指定的初始值设定项。尽管应用程序可能不会立即崩溃,但您应该会收到有关此问题的错误消息。即使它没有崩溃,该对象也没有用,并且很快就会导致问题,就像您所看到的那样。有two designated initializers ,其中任何一个都是有效的。

创建托管对象的单例共享实例是一件非常不寻常的事情。在某些情况下这可能是有道理的,但我从未遇到过这种情况。

关于objective-c - 无法在swift中继承NSMangedObject类型的 objective-c 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472471/

相关文章:

objective-c - 苹果操作系统 X : Best way to do runtime check for retina display?

ios - iOS中pod install命令的工作流程

ios - 自定义 UIButton 保持选中状态并更改颜色

swift - Swift 中的标签原点位置

ios - 使用 map 注释而不是表格 View 中的行来引用所选对象

ios - 如何在 3 个值之间设置 uilabel 文本的动画

iphone - Iphone的开发环境?

objective-c - 如何知道用户点击了 UITableViewCell 中的哪个位置?

ios - 如何将属性添加到使用数据模型创建的核心数据类?

ios - 如何将 5 个不同的头像应用到 5 个不同的 UIButton?