我正在开发一个使用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中存在一些无法解释的事情。
答案 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