2012-02-02 5 views
0

Я просто пытаюсь сохранить ManagedObjectContext, но пока я не получаю никаких ошибок, запрашиваемый запрос возвращает объект без каких-либо сохраненных значений. Рассмотрим этот простой пример. У вас есть один объект, вы меняете свойство и сохраняете его. Объект есть, но свойство не сохраняется. Как вы можете видеть, мне нужен только один объект, и выборка возвращает этот один объект. BTW, код находится в простом классе, а не в делегате приложения или контроллере представления.Основные данные, не могу сохранить контекст

Вот пример кода:

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

Можете ли вы проверить, что ваш контекст управляемого объекта не 'nil'? – sho

+0

Я положил чеки по всему месту. Объекты по-прежнему находятся в сфере охвата. – CYAD

ответ

0

Что делает ваш NSManagedObject подклассу выглядеть? Поскольку выборка работает правильно (т. Е. Возвращает объект), я подозреваю, что что-то не так в реализации подкласса.

Вы должны объявить @property для каждого из атрибутов вашей модели данных. И в файле реализации вместо использования @synthesize вам необходимо использовать @dynamic. Также убедитесь, что в вашем xcdatamodel, что объект имеет свой набор классов, а также имя.

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

@end 

@implementation MyEntity 
@dynamic boolValue; 

@end 
Смежные вопросы