我只是想保存一个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];
答案 0 :(得分:0)
您的NSManagedObject
子类是什么样的?由于fetch工作正常(即返回实体),我怀疑子类实现中出现了问题。
您应该为数据模型中的每个属性声明@property
。在实施文件中,您需要使用@synthesize
而不是@dynamic
。还要确保xcdatamodel
中的实体具有其类集以及名称。
@interface MyEntity : NSManagedObject
@property (nonatomic, strong) NSNumber * boolValue;
@end
@implementation MyEntity
@dynamic boolValue;
@end