Eya*_*yal 4 inheritance core-data objective-c nsmanagedobject
在我的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.在某些时候,它会调用它datasource(实现所需方法的任何元素<UITableViewDatasource>)来要求完成某些事情.然后,您可以让两个对象使用相同的类作为数据源,并且将共享实现.