在对象类型中找不到属性

时间:2012-06-23 05:24:07

标签: iphone objective-c xcode

我正在开发一个使用tableview和详细视图的简单核心数据应用程序。我收到错误消息,指出在对象类型ChildrenTVC中找不到属性managedObjectContext。问题是它确实存在。我已清理项目并删除了派生数据。必须有其他事情发生。 以下是对象标题的代码:

@interface ChildrenTVC : CoreDataTableViewController <AddChildTVCDelegate>

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

@end

和实现文件的代码:

#import "ChildrenTVC.h"


@implementation ChildrenTVC

@synthesize managedObjectContext = _managedObjectContext;
@synthesize fetchedResultsController = _fetchedResultsController;

以下是错误注册的app委托文件:

#import "AppDelegate.h"
#import "ChildrenTVC.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:       ( NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
ChildrenTVC *controller = (ChildrenTVC *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
return YES;
}

错误发生在controller.managedObjectContext上。很多这是样板代码所以没有多少。我只是无法弄清楚为什么它没有看到托管对象上下文的属性。该物业在代码中。

更新

我最终完全重新创建了该文件。我不确定更改文件时仍有哪些引用,但有些内容指向错误的文件。我不得不清空垃圾桶以使新文件正常工作。但它现在似乎有用了。我所做的所有研究最终都揭示了Xcode中存在一些无法解释的事情。

3 个答案:

答案 0 :(得分:1)

我通过完全重新创建头文件解决了这个问题,但我从未真正理解为什么会发生这种情况。那时我不明白的是我对应用程序所做的更改的影响。真正的问题是导入头文件的顺序问题。我在两个实现文件中更改了#import,导致编译器无法读取其中一个头文件。我可以看到代码在那里,但编译器无法读取代码,因为它没有导入它。这让位给我收到的错误。我的解决方案只是扭转了我所做的改变。只需删除应用程序委托上的视图控制器头文件的#import,就可以更轻松地解决这个问题。我最近测试了这个,这是正确的解决方案。

答案 1 :(得分:0)

您正在输入navigationController.topViewController,但我认为它不是现实中的一个。试试这个

ChildrenTVC *controller = [[ChildrenTVC alloc] init];
NSArray *vcArray = NSArray *vcArray = [NSArray arrayWithObject:controller]:
[self.window.rootViewController setViewControllers:vcArray animated:NO];

答案 2 :(得分:-2)

如果您对ChildrenTVC.h进行以下更改,会发生什么?

@interface ChildrenTVC : CoreDataTableViewController <AddChildTVCDelegate>
{
    NSManagedObjectContext *managedObjectContext;
    NSFetchedResultsController *fetchedResultsController;
}
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;

@end