5

サブクラスのカスタムinitをコーディングするにはどうすればよいですか? たとえば、NSManagedObject次のようなものが欲しいです。は2 つの属性を持つinitItemWithName:Volume:サブクラスで、と.ItemNSManagedObjectnamevolume

4

1 に答える 1

6

カルロス、

Nenad Mihajlovicが提案したように、このカテゴリを作成できます。

したがって、たとえば、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...

このアプローチは非常に柔軟性があり、アプリ開発中の保守が非常に簡単です。

詳細については、スタンフォードコースレクチャー14のコードサンプルをご覧ください。さらに、スタンフォード大学のiTunesの無料ビデオも参照してください(Apple IDをお持ちの場合)。

お役に立てば幸いです。

PS簡単にするために、nameはaNSStringであり、volumeはであると思いますNSNumber。タイプvolumeを使用する方が良いかもしれません。NSDecimalNumber

于 2012-08-29T14:47:31.623 に答える