0

我正在关注这里的核心数据教程。我们有 RootViewcontroller 和 addRecipeViewController。

我列出了一些类和一些函数以及下面的流程屏幕,这样您就不会迷路


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];
    } 

根视图控制器.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];
}

流量图片: 在此处输入图像描述


Save点击 addRecipeViewController 的事件时,它会保存recipesmanagedObjectContext. rootViewConroller 迟早会managedObjectContext使用NSFetchedResultsController

问题:我不明白所有视图控制器的相同之处,以便在添加或删除后您manageObjectContext将获得最新的更新manageObjectContextrootViewControllerRecipemanageObjectContextaddRecipeViewController

请帮助我理解这个问题。

欢迎所有评论在这里。

4

2 回答 2

1

managedObjectContext 基本上是您的持久层,它包括一个缓存和一种检索尚未在缓存中的对象的方法。您希望避免在您的应用程序中有多个托管对象上下文,这样您就不需要处理令人讨厌的缓存同步问题。

因此,我不确定您到底遇到了什么问题导致您暂停,但请不要使问题过于复杂。Core Data 非常好,可以为您提供持久存储的单个入口点,并为您保持所有内容同步,因此您应该使用它运行 :)

另外,请务必不要混淆NSManagedObjectContextNSManagedObject。托管对象存在于上下文中。它们不是同一件事。

于 2012-05-31T16:00:51.340 回答
0

当您的上下文发生变化时,您可能希望收到通知。如果是这样,请阅读以下内容:是否有 Core Data 回调方法?

于 2012-05-31T16:03:42.087 回答