objective-c – objective c – 创建一个NSManagedObject和从同一父类继承的常规NSObject类

在我的iPhone应用程序中,我有两个viewControllers:
viewController1有一个tableView,它显示了Item1对象的列表
viewController2有一个tableView,它显示了Item2对象的列表

其中Item1类和Item2类继承自抽象类ParentItem.

现在我想让Item2对象成为NSManagedObject,这样我就可以将它保存在设备上,并使viewController2使用NSFetchedResultsController来加载带有Item2对象的tableView.

但我不希望Item1成为NSManagedObject,我想将它用作常规对象.

问题是,如果我创建ParentItem类作为NSManagedObject,那么Item1类也将是一个NSManagedObject,我不能将它用作常规对象(我的意思是我不能用常规的alloc-init创建一个Item1对象,或者可以一世???)

如果我创建ParentItem类作为常规NSObject,那么Item2类也将是常规NSObject.

最佳答案
您最可能需要的是两个类可以实现的接口.我将使用一个人的例子:

@protocol PersonInterface <NSObject>

@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;

@end

继承自NSObject的类

@interface NonManagedPerson : NSObject <PersonInterface>
@end

@implementation NonManagedPerson

@synthesize firstName = _firstName;
@synthesize lastName  = _lastName;

@end

继承自NSManagedObject的类

@interface ManagedPerson : NSManagedObject <PersonInterface>
@end

@implementation ManagedPerson

@dynamic firstName;
@dynamic lastName;

@end

现在,如果一个对象需要使用这些类中的任何一个,它不关心它的超类型,它只关心该对象响应-firstName,-lastName,-setFirstName或-setLastName.

为了实现这种灵活性,您需要确保您想要使用的对象符合界面,因为您不再需要特定类型,例如:

@interface FootballClub : NSObject

@property (nonatomic, retain) id<PersonInterface> clubManager;

// .. other properties

@end

更新

要获得共享实现,您可以考虑组合/委派.

组成

你创建了另一个封装了常用工作的类,然后将它作为一个可用的ivar在你的类中使用.

代表团

与其他常见元素一样,例如UITableView.在某些时候,它会调用它的数据源(实现< UITableViewDatasource>所需方法的任何元素)来要求完成某些事情.然后,您可以让两个对象使用相同的类作为数据源,并且将共享实现.

转载注明原文:objective-c – objective c – 创建一个NSManagedObject和从同一父类继承的常规NSObject类 - 代码日志