我从Dave Mark和Jeff LeMarche的书《More iPhone 3 Development》中找到了一个明确的答案。
如果你真的很在意使用NSEntityDescrpiton
上的方法而不是NSManagedObjectContext
来插入新对象到NSManagedObjectContext
中,你可以使用分类将实例方法添加到NSManagedObjectContext
中。
创建两个名为NSManagedObject-Insert.h和NSManagedObject-Insert.m的新文本文件。
在NSManagedObject-Insert.h中,放置以下代码:
import <Cocoa/Cocoa.h>
@interface NSManagedObjectContext (insert)
- (NSManagedObject *)insertNewEntityWithName:(NSString *)name;
@end
在NSManagedObject-Insert.m中,放置此代码:
#import "NSManagedObjectContext-insert.h"
@implementation NSManagedObjectContext (insert)
- (NSManagedObject *)insertNewEntityWithName:(NSString *)name
{
return [NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:self];
}
@end
您可以在任何想要使用这个新方法的地方导入NSManagedObject-Insert.h。然后将对NSEntityDescription
的插入调用替换为以下内容:
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]
使用更短、更直观的方式:
[context insertNewEntityWithName:[entity name]]
分类难道不是很棒吗?
initWithEntity:insertIntoManagedObjectContext:
。awakeFromInsert
是进行初始化的适当位置。 - Alex