2015-06-26 3 views
0

Я пытаюсь извлечь некоторые объекты, которые Im разбор из JSON, я не хочу сохранять их, пока некоторые действия выполняются пользователем, но я хочу их получить. Не сохранять их означает, что я не смогу получить их в другом приложении, но это нормально. Итак, я создаю NSManagedObject, как это.Извлечение NSManagedObject не сохранено

NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:[self managedObjectContext]]; 
NSManagedObject *event = [[NSManagedObject alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:[self managedObjectContext]]; 

А потом я пытаюсь получить его вот так.

NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"Event" inManagedObjectContext:[self managedObjectContext]]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:entity]; 

NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"id_server == %@", aIdServer]; 

[fetchRequest setPredicate:testForTrue]; 

NSArray *arrayEvents = [[NSArray alloc]initWithArray:[[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]]; 

id_server представляет собой уникальное значение, и он никогда не возвращает событие, что там на самом деле, потому что если я печатаю все «События» в CoreData это показывает событие с id_server.

Если я сохранить контекст:

NSError *error; 
if (![[appDelegate managedObjectContext] save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 

Он находит события, но я не могу принести события без сохранения контекста?

Благодаря

[EDIT]

Как я получить доступ к managedContext является следующее:

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

     NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
    } 

ответ

0

The NSManagedObject экземпляров класса, которые создаются только остаются связанными с NSManagedObjectContext, который был использован для их создания до тех пор, пока вы не поделитесь ими с постоянным хранилищем. Итак, если вы хотите получить одни и те же объекты (не сохраняемые в постоянном хранилище), вам понадобится ссылка на тот же экземпляр NSManagedObjectContext, который использовался для их создания.

В вашем коде [self managedObjectContext] создает новый managedObjectContext каждый раз, когда он вызывается или он просто возвращает тот же контекст? Если он создает новый managedObjectContext каждый раз, то вы получаете новый экземпляр NSManagedObjectContext и, следовательно, вы не сможете получить эти экземпляры NSManagedObject.

Однако, если он возвращается один и тот же экземпляр NSManagedObjectContext, то вы можете использовать

[myFetchRequest setIncludesPendingChanges:YES]; 

Apple Doc

Это соответствует против настоящего несохраненных изменений в контексте управляемого объекта.

+0

Я добавил метод, когда я получаю управляемыйконтекст. Это ленивая нагрузка, но на самом деле мне нужно что-то сделать с управляемым контентом, который в какой-то момент изменился, но я не могу понять, как и почему. Я также добавил setIncludesPendingChanges, но все равно он не находит событие. – subharb

+0

Чтобы добавить колдовство к этому, если я выберу другой атрибут, например имя, он выберет соответствующее событие. – subharb

+0

Можете ли вы проверить правильность установки свойства id_server класса Event? Также убедитесь, что «aIdServer», который вы тестируете в NSPredicate, не «nil». – tek3

0

Несмотря на то, что все атрибуты были установлены правильно, поскольку я напечатал все значения, и они были верны, я делал что-то странное, устанавливая в качестве NSString то, что первоначально (с сервера) является int. Когда я сохранял контекст, выборка работала правильно, но когда я этого не сделал, как-то стало проблемой. Изменение типа этого атрибута, которое я искал, решило проблему.

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