我想继承我的NSManagedObject类来封装我的get,set,save例程。该类使用自己的managedObjectContext和共享的persistentStoreCoordinator,因为这需要线程安全。NSManagedObject的子类导致NSInvalidArgumentException
所有没有问题的方法调用,但是当我试图执行保存:方法,我得到以下错误:
NSInvalidArgumentException', reason: '**-[MyEntity save:]: unrecognized selector sent to instance**'
附件是一个简化版本,给出了同样的错误。
下面是子类代码:
@interface XXMyEntity : MyEntity {
@private
NSManagedObjectContext * _managedObjectContext;
}
- (XXMyEntity *) init;
- (BOOL) save:(NSError **)error;
- (NSManagedObjectContext *) managedObjectContext;
- (NSPersistentStoreCoordinator *) persistentStoreCoordinator;
@end
@implementation XXMyEntity
- (XXMyEntity *) init
{
self = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:[self managedObjectContext]];
return self;
}
- (BOOL) save:(NSError **)error
{
return [[self managedObjectContext] save:error];
}
- (NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
- (NSPersistentStoreCoordinator *) persistentStoreCoordinator
{
newCoreDataAppDelegate * appDelegate = (newCoreDataAppDelegate *)[[UIApplication sharedApplication] delegate];
return appDelegate.persistentStoreCoordinator;
}
- (void) dealloc
{
[_managedObjectContext release];
[super dealloc];
}
@end
实施:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
XXMyEntity * myEntity = [[XXMyEntity alloc]init];
myEntity.id = [NSNumber numberWithInt:1];
myEntity.title = @"My Title";
[myEntity save:nil];
[self.window makeKeyAndVisible];
return YES;
}
我也试图改变方法签名别的东西一样saveEntity假设也许我与继承的方法干扰没有成功。
任何帮助,非常感谢。
你可以发送一个测试消息myEntity像一个富方法? – 2011-04-05 20:30:50
要查看它是否响应?我可以尝试,但它会响应init,所以我会认为这将是相同的。 – 2011-04-05 20:31:49
有趣的是,我添加了以下方法: - (无效)的东西,它也抛出错误。然而,初始化工作。 – 2011-04-05 20:33:08