ios - 如何在每个 child 的内部以不同的方式转换 super 变量?

标签 ios nsmanagedobject superclass

当前状态
我有一个名为“GeneralCard”的父类(super class),它是许多“CardsController”的父类(super class)。

每个继承自“GeneralCard”的类都有一个不同的 UIViewController 子类,它包含不同的 NSManagedObjects 子类 -

(WhiteCardsController -->WhiteCard, RedCardsController --> RedCard ...)。

我有很多对于所有托管对象来说实际上都是相同的函数。所以我想将它们分组到通用卡中。

问题

我创建了一个名为:

的“常规”NSManagedObject
 NSManagedObject *currentCard.

现在在我尝试转换的每个 View Controller 上:

self.currentCard = (WhiteCard*)self.currentCard;

所以我将能够使用“WhiteCard”属性。

这不起作用,因为我不断收到这样的错误 -

...Cards View Controllers/WhiteCardViewController.m:226: error: request for member 'letter' in something not a structure or union

因为字母不是在 NSManagedObject 中构造的,但它在他的 WhiteCard 子类中是构造的。

针对问题 *我如何从 super 共享相同的变量,但在每个 vew Controller 上以不同的方式转换它?*

非常感谢

沙尼

最佳答案

我将为每个返回类型转换对象的子类编写一个访问器方法。像这样的东西:

- (WhiteCard *)myTypeCurrentCard {
    return (WhiteCard *)self.currentCard;
}

父类会有这样的内容:

- (GenericCard *)myTypeCurrentCard {
    return (GenericCard *)self.currentCard;
}

在具有这些方法的每个 Controller 类中,消息[self myTypeCurrentCard]将返回一个转换为当前类型的对象。此方法不保证生成的对象实际上是该类型的对象,因此必须注意确保通过发送非 WhiteCard 对象白卡特定消息不会发生运行时错误。

关于ios - 如何在每个 child 的内部以不同的方式转换 super 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328760/

相关文章:

ios - 除非滚动表格,否则 UIView 在 UITableViewCell 内调整大小不会显示

ios - 查找我的应用程序,编译后的可执行代码

ios - 将我的 NSManagedObject 子类与我的 ViewController.swift 连接起来

ios - 在 viewDidLoad 下播放背景音乐时出现 SIGABRT 错误

ios - 使用不同的 info.plist 文件从命令行构建 iOS 应用程序

objective-c - 地幔和核心数据 : Only one Model

ios - NSManagedObject 方法没有被调用

java - java中如何从父类(super class)继承部分构造函数到子类

java - 如何确保代码在继承时按特定顺序执行

java - 在父类(super class)中调用父类(super class)方法