![](/img/trans.png)
[英]Two different classes inherit from the same super class in Objective-C
[英]objective c - making a NSManagedObject and regular NSObject classes that inherit from the same parent class
在我的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>
所需方法的任何元素)來要求完成某些事情。 然后,您可以讓兩個對象使用相同的類作為數據源,並且將共享實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.