【问题标题】:How to pass ManagedObjectContext to TabBarViewControllers如何将 ManagedObjectContext 传递给 TabBarViewController
【发布时间】:2012-01-06 02:38:17
【问题描述】:

在stackoverflow中阅读了相当多的问题后,我目前仍然找不到答案。

我无法将 ManagedObjectContext 从 appdelegate 传递到我的 tabbarcontroller 视图。

在我的 appdelegate.m 我有这个

#import "memoView.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    memoView *mView = (memoView *)navigationController.topViewController;
    mView.ObjectContext =[self managedObjectContext];
}

在 memoView.m 中

- (void)viewDidLoad
{
    [super viewDidLoad];


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"NoteLog" inManagedObjectContext:[self ObjectContext]];
    [fetchRequest setEntity:entity];
    NSError *error;
    self.memoInfo = [ObjectContext executeFetchRequest:fetchRequest error:&error];
    //self.title = @"Memo"; 
    [fetchRequest release];

}

错误原因:'+entityForName: 找不到实体名称'NoteLog'的 NSManagedObjectModel'

我不确定我做错了什么,我对核心数据比较陌生。

感谢任何 cmets。

【问题讨论】:

    标签: iphone ios xcode core-data


    【解决方案1】:

    我曾经遇到过这个问题并像这样解决了:

    YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    self. ObjectContext = appDelegate.ManagedObjectContect;
    

    【讨论】:

      【解决方案2】:

      你把下面的代码放在哪里?我猜mView 在分配mView.ObjectContext 时为零:

      #import "memoView.h"
      memoView *mView = (memoView *)navigationController.topViewController;
      mView.ObjectContext =[self managedObjectContext];
      

      【讨论】:

      • 我在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中添加代码
      • 你测试mView是否为nil?
      【解决方案3】:

      我会亲自实施Singleton for my CoreData Stack。 - 但以更安全的方式like here.

      单例模式基本上是“全局变量”的借口。尽管如果正确实施并明智地使用,这是最强大的模式之一。简单地说,它的作用是:它创建一个类的对象,如果它还不存在,并将它存储在该对象类的静态变量中。而且由于类变量的内容在该类的所有实例中都是相同的(显然),下次您尝试分配该类的实例时,它会检查它是否之前分配过,如果它返回旧实例。

      因此,您基本上可以从任何地方“分配”,无论您想要多少频率,您总是会得到相同的对象。

      然后人们倾向于按照“DataManager”或类似的方式调用该单例类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-27
        • 2010-11-07
        • 2013-11-18
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多