0

我正在开发一个使用表格视图和详细视图的简单核心数据应用程序。我收到错误消息,指出在对象类型 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;

这是错误注册的应用程序委托文件:

#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 中无法解释的一些事情。

4

3 回答 3

1

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

于 2012-11-20T21:51:58.053 回答
0

您正在键入 navigationController.topViewController,但我认为它实际上不是一个。试试这个

ChildrenTVC *controller = [[ChildrenTVC alloc] init];
NSArray *vcArray = NSArray *vcArray = [NSArray arrayWithObject:controller]:
[self.window.rootViewController setViewControllers:vcArray animated:NO];
于 2012-06-23T05:29:39.867 回答
-2

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

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

@end
于 2012-06-23T07:07:47.040 回答