2012-01-15 9 views
4

私のiPhoneアプリケーションには2つのviewControllerがあります。 viewController1はItem1オブジェクトのリストを示すtableViewを持っています viewController2はリストItem2オブジェクトのクラス目的 - 同じ親クラスから継承するNSManagedObjectクラスと通常のNSObjectクラスを作成する

ここで、Item1クラスおよびItem2クラスは、抽象クラスParentItemから継承します。

これで、Item2オブジェクトをNSManagedObjectにしたいので、デバイスに保存して、viewController2でNSFe​​tchedResultsControllerを使用してItem2オブジェクトでtableViewをロードするようにします。

私はItem1をNSManagedObjectにしたくありませんが、私はそれを通常のオブジェクトとして使いたいと思います。

問題は、NSManagedObjectとしてParentItemクラスを作成すると、Item1クラスもNSManagedObjectになり、通常のオブジェクトとして使用できなくなります。つまり、通常のallocオブジェクトでItem1オブジェクトを作成することはできません。 init、can I ???)

普通のNSObjectとしてParentItemクラスを作成すると、Item2クラスも通常のNSObjectになります。

+0

共有実装が必要なのか、共有インターフェースだけが必要ですか?共有インターフェイスの場合は、プロトコルを使用するだけです。 – joerick

+0

私はまたあなたの返信のための共有実装 – Eyal

答えて

9

あなたが最も必要とするのは、2つのクラスが実装できるインターフェイスです。私は、人の例を使用します:

NSObjectオブジェクトを使用する必要がある場合 NSManagedObject

@interface ManagedPerson : NSManagedObject <PersonInterface> 
@end 

@implementation ManagedPerson 

@dynamic firstName; 
@dynamic lastName; 

@end 

から継承

@interface NonManagedPerson : NSObject <PersonInterface> 
@end 

@implementation NonManagedPerson 

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

@end 

クラスから継承

@protocol PersonInterface <NSObject> @property (nonatomic, copy) NSString *firstName; @property (nonatomic, copy) NSString *lastName; @end 

クラスこれらのクラスのいずれかは、それがスーパータイプであるかどうか気にしません。オブジェクトが-firstName,-lastName,-setFirstNameまたは-setLastNameに応答することのみを気にしてください。

あなたは、もはや特定のタイプの例については気にしているとして、使用したいオブジェクトがインタフェースに準拠していないことを確実にする必要があり、この柔軟性許可するには:

@interface FootballClub : NSObject 

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

// .. other properties 

@end 

更新

共有の実装を取得するには、作成/委任を検討することができます。

作曲

あなたは一般的な作業をカプセル化し、別のクラスを作成して、あなたのクラスで使用するIVARとして利用できるようにそれを持っています。

委任

UITableViewなどの他の共通要素として、同じ操作を行います。特定の時点で、それは何かを求めるためにdatasource(必要なメソッドを実装する任意の要素<UITableViewDatasource>)を呼び出します。次に、2つのオブジェクトにデータソースと同じクラスを使用させ、実装を共有することができます。

+1

ありがとう、しかしあなたは継承の問題を調整しなかった.. ManagedPersonとNonManagedPersonがdoSomthingメソッドと同じ実装を持っていたらどうなるでしょうか? – Eyal

+0

例がありますか?おそらく、委託の構成は、これらのインスタンスであなたを助けるでしょう –

+0

私のケースでは、ManagedPersonとNonManagedPersonがいくつかのシャード実装を持っているので、私はそれらをシャードメソッドを実装する親オブジェクトから継承しました。インターフェイスのみを使用する際の問題は、両方で同じ実装を複製する必要があることです。 – Eyal

関連する問題