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



我正在开发一个应用程序,其中有两个非常相似的模型类。我想在一个视图控制器中使用这两个类,该视图控制器的布局基于模型类的属性。问题是,我目前有很多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。我也希望对象是可更新的、可删除的等等。我想我可能可以使用Enum或类似的东西来创建一个抽象类,但我不知道这样的类会是什么样子、工作和使用。

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

Core Data支持抽象超类的概念。所以你用一个属性来定义它,比如"tag",它区分了这两个类。那么News和Event都将该类作为它们的超类。这是一种与核心数据一起使用的非常常见的解决方案。

尝试这样做:

//in NewsEventRootObject.h
@interface NewsEventRootObject:NSManagedObject //root object for these two classes
[...]
@property (nonatomic,retain) NSString *text; //similar fields in here
-(void) getSomeValue;
//in News.h
@interface News : NewsEventRootObject
[...]
-(void) getNews;
//in Event.h
@interface Event : NewsEventRootObject
[...]
-(void) getEvent;
//in your "handler".m
- (UIView *)setUpViewForObject:(NewsEventRootObject *) object
{ 
    //you can access similar fields and methods without if/else statements
    self.customUiView.textField.text = object.text;
    SomeValue *someValue=[object getSomeValue];
    //but for class-specific you should make a check
    if ([object respondsToSelector:@selector(getEvent)]) {
    }
    if ([object respondsToSelector:@selector(getNews)]) {
    }
}  

实际上,永远不要通过==检查类,使用isKindOfClass语句

相关内容

最新更新