2012-08-29 17 views
5

NSManagedObjectサブクラスのカスタムinitをどのようにコードすることができますか?私は例えばinitItemWithName:Volume:のようなものが欲しいです。 ItemNSManagedObjectサブクラスで、2つの属性、namevolumeです。NSManagedObjectサブクラスのカスタムinit

+3

次の質問http://stackoverflow.com/questions/10489578/custom-initializer-for-an-nsmanagedobjectをご覧ください。 私はおそらくお手伝いします。 –

+0

@NenadMihajlovic +1。良いコメント! –

答えて

6

カルロス、

ネナドミハイロビッチは、あなたがこのためにカテゴリを作成することができます示唆し通り。

たとえば、Itemクラスがある場合は、Item+Managementというカテゴリを作成してそこに作成コードを入れることができます。ここで簡単な例を見つけることができます。

// .h 

@interface Item (Management) 

+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context; 

@end 

// .m 

+ (Item*)itemWithName:(NSString *)theName volume:(NSNumber*)theVolume inManagedObjectContext:(NSManagedObjectContext *)context 
{ 
    Item* item = (Item*)[NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context]; 
    theItem.name = theName; 
    theItem.volume = theVolume; 

    return item; 
} 

あなたは、新しいアイテムを作成

#import "Item+Management.h" 

のようなインポートを行うと、このアプローチは非常に柔軟で、中に維持することは非常に容易である。この

Item* item = [Item itemWithName:@"test" volume:[NSNumber numberWithInt:10] inManagedObjectContext:yourContext]; 
// do what you want with item... 

のように使用したいですアプリ開発。

さらに詳しい情報はStanford Course Lecture 14コードサンプルをご覧ください。さらに、StanfordによるiTunesの無料ビデオもご覧ください(Apple IDをお持ちの場合)。

希望に役立ちます。

P.S.わかりやすくするために、私はnameNSStringであり、volumeNSNumberであると仮定します。 volumeの場合は、NSDecimalNumberタイプを使用する方が良いかもしれません。

+0

ありがとうFlex_Addicted多くの!しかし、1つの質問:NSManagedObjectサブクラスではなく、カテゴリでこれらのメソッドを作成する必要があるのはなぜですか?私にはいくつかのクラスがあり、少なくとも7つのカテゴリが必要です。 – Carlos

+0

http://stackoverflow.com/questions/9297101/nsmanagedobjects-with-categoriesおよびhttp://blog.chrismiles.info/2011/06/organising-core-data-for-ios.htmlで情報を見つけることができます。 (私は非常に後者のヒントが好きです)。 Xcodeを使用して管理対象オブジェクトのカスタムクラスを生成する場合の簡単な説明:エンティティ内の何かを変更してその変更に対応するクラスを生成すると、元のサブクラスで記述したコードが上書きされます。 –

+0

どうもありがとう!! – Carlos

関連する問題