AppDelegate未找到ViewController的声明和合成属性

时间:2012-06-14 19:07:39

标签: objective-c ios core-data properties uiapplicationdelegate

我的应用程序已经在dev下几个月了,现在我被要求添加Core Data。 SMH。它是一个tabViewController应用程序。我不知道这是否有助于答案。

所以我在这里尝试添加它并且我遇到了错误。我在 AppDelegate.h 中为核心数据构建,所以我创建了这些IVAR并在以后的.m中适当地构建它们。

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

在需要CoreData交互的viewControllers中,我已经给出了它们(在.h文件中):

@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

并在.m:

中合成它们
@synthesize fetchedResultsController = __fetchedResultsController;
@synthesize managedObjectContext = __managedObjectContext;

现在,回到 AppDelegate 。在.m中,当我尝试将managedObjectContext的指针从委托传递给视图时(如此):

viewController1.managedObjectContext = self.managedObjectContext;
viewController2.managedObjectContext = self.managedObjectContext;

我收到一个读取的XCode错误(对于viewController1和2):

Property 'managedObjectContext' not found on object of type 'UIViewController *'

我不明白这一点,因为两个视图控制器中的属性显然存在并被合成。

我甚至尝试过退出并重启XCode。也许系统重启? < - 这是荒谬的吗?

(我知道我添加的内容超出了你的需要..)有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

首先,如果已经创建了应用程序without CoreData,则使用UIManagedDocument设置核心数据会更容易。

所以我会先在AppDelegate中这样做。请参阅Apple开发人员网站上的UIManagedDocument类参考以及我的答案:

Objective c - Core Data saving approach

其次你的appDelegate应该知道你的初始视图控制器,它实际上是你的UITabBarController,你的标签栏控制器知道它的第一个视图控制器应该是你的上下文的目标,因此需要一个{{ 1}}公共API中的属性。

所以我忘记了确切的代码,但它类似于:

NSManagedObejectContext

希望这能帮到你!

答案 1 :(得分:0)

我在另一个post找到了这个答案:

“另一种方法是从应用程序委托中提取上下文 - 如果您更改应用程序的组织方式,则必须重新编码应用程序委托。您可以在任何地方获取指向应用程序委托的指针,所以可以将以下代码添加到任何视图控制器中:

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

通常在viewDidLoad中。“

感谢用户:jrturton获取答案