2012-06-12 1 views
4

в моем приложении iOS У меня есть основные данные, и я заметил, что когда-то в определенном представлении, когда я извлекаю информацию из основных данных, не всегда актуальны, я хорошо объясняю:Обновить ссылку ManagedObjectContext

если я обновить некоторое значение в основных данных, а затем я уместиться в конкретной целью просмотра этой информации, что информация не в курсе, теперь я показываю, как я получить доступ к своей базе данных:

.h

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 

.m

@synthesize managedObjectContext; 

- (NSArray *)sortInformation{ 

if (managedObjectContext == nil) { 

    managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext]; 

} 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

.... 

, а затем я отображаю свою информацию в виде таблицы, все работает отлично, есть только эта проблема, что НЕКОТОРЫЕ ВРЕМЯ кажется, что обновление, которое я сделал в другом представлении, не читается в этом представлении, но если i закройте приложение, и я закрою его из фона, а затем снова заново закрою все, что хорошо работает ... поэтому я правильно сохранил обновление в основных данных, поэтому я думаю, что проблема в этом представлении, возможно, у меня есть старая отнесение основных данных, а не версии обновлений, может быть, проблема заключается в следующем:

if (managedObjectContext == nil) { 

    managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext]; 

} 

, что обновление только если переменная managedObjectContext равна нулю, так только если точка зрения освобождаться ... так никогда, потому что это один из мой корневой вид contr oller в UITabbarController, так что мой вопрос в том, как я могу получить доступ к основным данным, чтобы всегда иметь версию обновления?

+0

Вы не должны освежить managedObjectContext для ситуаций, когда вы не получаете актуальных данных. Возможно, вы захотите проверить, сохраняете ли вы свой контекст или перетаскиваете изменения из дочернего контекста в родительский контекст и сохраняете родительский контекст. – timthetoolman

+0

Я не понимаю, что вы имеете в виду ... – Piero

+0

вам не нужно обновлять управляемый объектObjectContext. ошибка в вашей логике в другом месте не позволяет вашим представлениям обновлять данные. – timthetoolman

ответ

0

О реализации класса базы данных вы можете сделать как этот

-(id) initWithContext: (NSManagedObjectContext *)managedObjContext { 
    self = [super init]; 
    [self setManagedObjectContext:managedObjContext]; 
    return self;  
} 

в managedObjContext является передача и установить

На делегат своего приложения, когда вызвать класс базы данных должно быть что-то вроде этого

database = [[Database alloc] initWithContext:self.managedObjectContext]; 

Тогда вы хорошо получили доступ к базе данных, как этот

- (NSArray *)sortInformation { 
      NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
      NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

      NSMutableArray *mutableFetchResults = [[[managedObjectContext_ executeFetchRequest:request error:&error] mutableCopy] autorelease]; 
      [request release]; 
      return mutableFetchResults; 
} 
+0

Да, делегат приложения managedObjectContext должен возвращаться, как вы говорите, поэтому я пытаюсь сделать это: managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext]; но таким образом я не использую слишком много памяти? – Piero

+0

Я отредактирую свой ответ – dianz

+0

У меня нет класса базы данных, какой класс базы данных? – Piero

1

нет необходимости обновлять контекст просто вызвать метод сохранить на managedObjectContext как [managedObjectContext save]; или если вы используете более чем один контекст управляемого объекта, который вы должны объединить изменения, сделанные в контексте

+0

В представлении я обновляю контекст, я делаю managedobjectcontext save ... – Piero

+0

ru вызов reloaddata на ур таблице Просмотр? ... один раз и сохранить контекст? –

+0

В представлении появится я вызываю этот метод - (NSArray *) sortInformation {я пишу выше, поэтому я думаю, что обновлен, но некоторое время это примечание refreshd, поэтому, возможно, мне нужно удалить if (managedObjectContext == nil) { ? – Piero

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

  • Нет связанных вопросов^_^