objective-c - 如何在 Objective-C 中创建两个模型类的包装类

标签 objective-c ios core-data nsmanagedobject

我正在开发一个应用程序,其中有两个非常相似的模型类。我想在一个 View Controller 中使用这两个类,该布局基于模型类的属性。问题是我目前有很多 if 语句来检查它是哪个类。

示例:

- (UIView *)setUpViewForObject:(id)object
{

    // Check if it is a Post or Event object
    Post *post;
    Event *event;
    if ([object class] == [Event class]) {
        event = (id)object;
    } else if ([object class] == [Post class]) {
        post = (id)object;
    }

    if (post) {
        // Do stuff
        // ie:
        self.customUiView.textField.text = post.text;
    } else if (event) {
        // Do similar stuff
        // ie:
        self.customUiView.textField.text = event.text; 
    }
}  

这个解决方案看起来相当多余,我在几个地方做了它。因此,我想知道是否可以创建两个 NSManagedObject 类的包装类。我使用 CoreData 并从 xCode 生成模型,因此我不会使用所有这些 if 语句。

类似于:

@interface News : NSManagedObject
[...]
@property (nonatomic, retain) NSString * text;
[...]

@interface Event : NSManagedObject
[...]
@property (nonatomic, retain) NSString * text;
[...]

是否可以创建这两个 NSManagedObject 类的包装类,也许可以使用枚举。我还希望这些对象是可更新、可删除等。我想我也许可以使用 Enum 或类似的东西来创建一个抽象类,但我不知道这样的类将如何外观、工作和使用。

如果可能的话,任何建议以及在这种情况下像这样的包装类的外观将不胜感激。

最佳答案

Core Data 支持抽象父类(super class)的概念。因此,您可以使用一个属性(例如“标签”)来定义它,该属性可以区分这两个类。那么新闻和事件都将该类作为它们的父类(super class)。这是与 Core Data 一起使用的非常常见的解决方案类型。

关于objective-c - 如何在 Objective-C 中创建两个模型类的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11808954/

相关文章:

ios - Google map ios - 如何始终显示标记信息窗口?

ios - 在 Xcode 8.3 上向 iOS 10 添加角标(Badge)图标

iphone - 自定义核心数据实体

ios - 核心数据 : error: -addPersistentStoreWithType:SQLite configuration:(null)

swift - swift 中的核心数据一对多关系

iphone - 如何在 NSArray 中获取索引?

ios - Objective-C 运行时关联对象与 NSMutable 字典

ios - 如何对 Sprite 工具包中的整个类别位掩码应用脉冲

ios - Swift 3 面向协议(protocol)编程导致随机 SIGBUS 崩溃

ios - 如何使 CBCharacteristic Property Indicate 的特征发挥作用?