簡體   English   中英

objective c - 創建一個NSManagedObject和從同一父類繼承的常規NSObject類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM