0

テーブルビューと詳細ビューを使用するシンプルなコアデータアプリに取り組んでいます。プロパティmanagedObjectContextがオブジェクトタイプChildrenTVCに見つからないことを示すエラーメッセージが表示されます。問題はそれが本当にそこにあるということです。プロジェクトをクリーンアップし、派生データを削除しました。他に何かが起こっているに違いありません。オブジェクトヘッダーのコードは次のとおりです。

@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

私はヘッダーファイルを完全に再作成することでこの問題を解決しましたが、なぜそれが起こったのか本当に理解できませんでした。そのとき私が理解していなかったのは、アプリに加えた変更の影響でした。本当の問題は、ヘッダーファイルがインポートされたシーケンスの問題でした。2つの実装ファイルの#importを変更したため、コンパイラがヘッダーファイルの1つを読み取れませんでした。コードがそこにあることはわかりましたが、コンパイラはコードをインポートしていないため、コードを読み取ることができませんでした。それは私が受け取っていたエラーに道を譲りました。私の解決策は、私が行った変更を単純に元に戻しました。アプリデリゲートのViewControllerヘッダーファイルの#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 に答える