【问题标题】:Where do I get a managed object context?我从哪里获得托管对象上下文?
【发布时间】:2011-05-07 15:04:17
【问题描述】:

在我的 AppDelegate.m 中,在 application: didFinishLaunchingWithOptions: 方法中,我输入了以下行:

NSManagedObjectContext *context = [self managedObjectContext];

但它说:AppDelegate 可能无法响应 managedObjectContext。我在网上的教程中看到了这个,我做错了什么?我将#import <CoreData/CoreData.h> 放在我的 App_Prefix.pch 文件中(请参阅Adding Core Data to existing iPhone project),但这并没有帮助。

目标是设置myViewController.context = context,然后使用该上下文在视图控制器中获取一些数据。

编辑:请参阅我对 O. Begemann 答案的评论。

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    您的 AppDelegate.h 中是否有带有签名 -(NSManagedObjectContext *) managedObjectContext;@property(...) NSManagedObjectContext *managedObjectContext; 的方法?

    【讨论】:

      【解决方案2】:

      创建一个空的示例应用程序并确保选中 Core Data 复选框。然后查看在应用程序委托中生成的 Core Data 样板代码。您的应用中需要相应的代码。

      【讨论】:

      • 现在我遇到了一个异常:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter',在线:NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"InfoWeek.sqlite"]]。我检查了 applicationDocumentsDirectory;对于示例应用程序,有一个 Untitled.sqlite 文件,但我的是空的。我该怎么办?
      • 好的,解决了,这实际上是另一行问题,我需要将ofType:@"momd"更改为“妈妈”。
      【解决方案3】:

      您正在查看的教程很可能使用了包含 Core Data 的 iPhone 项目模板。当您创建一个新项目时,大多数模板都有一个“使用核心数据进行存储”的复选框选项。选择该选项会在您的应用程序委托中创建三个方法来检索 managedObjectContext、managedObjectModel 和 persistentStoreCoordinator。您可以使用 [self managedObjectContext] 等访问这些方法,就像您提到的教程中一样。

      【讨论】:

        【解决方案4】:

        蒂姆,

        非常感谢您的建议。创建这个样板应用程序后,我意识到如果您选择 CoreData 选项,XCode 会在应用程序委托中生成一些额外的代码。我不明白为什么 Apple 的开发指南有相对较长的初始化核心数据堆栈的多步骤过程,并且大多数示例只是引用这个(默认情况下不存在!)属性。事实证明,所有这些示例都假设应用程序是以某种方式创建的。

        【讨论】:

          【解决方案5】:

          如果您决定将核心数据添加到现有项目并且您没有选中教程中提到的那个框,那么您需要将属性添加到 appdelegate 头文件以及前缀中的这个重要部分.pch

          #import <Availability.h>
          
          #ifndef __IPHONE_3_0
          #warning "This project uses features only available in iOS SDK 3.0 and later."
          #endif
          
          #ifdef __OBJC__
              #import <UIKit/UIKit.h>
              #import <Foundation/Foundation.h>
              #import <CoreData/CoreData.h>
          #endif
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-27
            • 1970-01-01
            相关资源
            最近更新 更多