核心数据,无法保存上下文

时间:2012-02-02 13:10:26

标签: ios core-data

我只是想保存一个ManagedObjectContext,但是当我没有错误时,获取的请求返回没有保存值的对象。考虑这个简单的例子。您有一个对象,您更改属性并保存它。对象在那里,但属性未保存。如您所见,我只想要一个对象,并且fetch返回这个对象。顺便说一句,代码是一个简单的类,而不是app委托或视图控制器。

以下是示例代码:

MyAppDelegate* delegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext* context = delegate.managedObjectContext;

NSEntityDescription *myEntityDesc = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context];

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];

[request setEntity:myEntityDesc];

NSError *error = nil;

NSArray *array = [context executeFetchRequest:request error:&error];
MyEntity* myEntity;

if (array == nil || [array count] < 1)
{
    myEntity = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:context];
}
else 
{
    myEntity = [array objectAtIndex:0];
}

myEntity.BoolValue = [NSNumber numberWithBool:someBoolValue];
myEntity.ID = @"Some ID";

if ([context save:&error])
{
    NSLog(@"no error");
}
else 
{
    NSLog([NSString stringWithFormat:@"found core data error: %@", [error localizedDescription]]);
}

以下是用于稍后检索值的代码:

MyAppDelegate* delegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext* context = delegate.managedObjectContext;

NSEntityDescription *MyEntityDesc = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context];

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];

[request setEntity:MyEntityDesc];

NSError *error = nil;

NSArray *array = [context executeFetchRequest:request error:&error];

MyEntity* myEntity;

if (array == nil || [array count] < 1)
{
    //handle error
}
else 
{
    myEntity = [array objectAtIndex:0];
}

return [myEntity.BoolValue boolValue];

1 个答案:

答案 0 :(得分:0)

您的NSManagedObject子类是什么样的?由于fetch工作正常(即返回实体),我怀疑子类实现中出现了问题。

您应该为数据模型中的每个属性声明@property。在实施文件中,您需要使用@synthesize而不是@dynamic。还要确保xcdatamodel中的实体具有其类集以及名称。

@interface MyEntity : NSManagedObject
@property (nonatomic, strong) NSNumber * boolValue;

@end

@implementation MyEntity
@dynamic boolValue;

@end