2012-05-31 2 views
0

Я следую руководству по основным данным здесь. У нас есть RootViewcontroller и addRecipeViewController.Как узнать, как managedObjectContext получает изменение в другом контроллере представления

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


Recipe.h 
#import <CoreData/CoreData.h> 
@interface Recipes : NSManagedObject 
{ 
} 
@property (nonatomic, retain) NSString * recipeName; 
@property (nonatomic, retain) NSString * cookingTime; 

@end 

addRecipeViewController.h 
@class Recipes; 

@interface AddRecipeViewController : UIViewController <UITextFieldDelegate> { 
    Recipes *recipes; 
    UITextField *textFieldOne; 
    UITextField *textFieldTwo; 
} 

addRecipeViewController.m 
    - (void)save { 
     1.recipes.recipeName = textFieldOne.text; 
     2.recipes.cookingTime = textFieldTwo.text; 
     3.NSError *error = nil; 
     4.if (![recipes.managedObjectContext save:&error]) { 
      // Handle error 
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      exit(-1); // Fail 
     } 
     [self dismissModalViewControllerAnimated:YES]; 
    } 

RootViewC ontroller.m

- (void)insertNewObject { 
    AddRecipeViewController *addRecipeView = [[AddRecipeViewController alloc] initWithNibName:@"AddRecipeViewController" bundle:[NSBundle mainBundle]]; 
    Recipes *recipes = (Recipes *)[NSEntityDescription insertNewObjectForEntityForName:@"Recipes" inManagedObjectContext:self.managedObjectContext]; 
    addRecipeView.recipes = recipes; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: addRecipeView]; 
    [self.navigationController presentModalViewController:navController animated:YES]; 
    [addRecipeView release]; 
} 

картина для потока: enter image description here


Когда событие Save из addRecipeViewController щелкают, это позволит сэкономить recipes в managedObjectContext. Рано или поздно, rootViewConroller будет извлекать данные из managedObjectContext с помощью NSFetchedResultsController

ВОПРОС: Я не понимаю, как manageObjectContext одинакова для всех контроллера представления, так что вы получите самый обновленный manageObjectContext в rootViewController после добавления или удаления Recipe от manageObjectContext от addRecipeViewController

Пожалуйста, помогите мне разобраться в этой проблеме.

Все комментарии приветствуются здесь.

ответ

1

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

Так что я не уверен, в чем проблема, с которой вы столкнулись, именно в том, что вызывает паузу, но, пожалуйста, не слишком усложняйте проблему. Основные данные достаточно хороши, чтобы предоставить вам единую точку входа в хранилище персистентности и синхронизировать все для вас, поэтому вы должны работать с ним.

Также не забудьте перепутать NSManagedObjectContext и NSManagedObject. Управляемые объекты живут в контексте. Это не одно и то же.

+0

моя проблема заключается в сохранении Рецепта, который managedObjectContext будет хранить этот объект и когда вы извлекаете данные (очевидно, данные являются объектом Рецепт), который используется для управляемого ObjectContext ... – tranvutuan

+0

Это все тот же объект. В вашем приложении должен быть только один управляемый объект. Храните его в AppDelegate, например, и предоставьте метод, позволяющий получить его, где бы вы ни нуждались. – mprivat

0

Возможно, вам захочется получить уведомление, когда что-то изменится в вашем контексте. Если это так, прочитайте следующее: Are there Core Data call back methods?

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