1

シンプルなコア データ アプリを作成しようとしています。アプリデリゲートに次のコードがあります。

#import <UIKit/UIKit.h>

@interface HEFTAppDelegate : UIResponder <UIApplicationDelegate>{

}


@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;


@end

次に、実装で

#import "HEFTAppDelegate.h"
#import "HEFTMasterViewController.h"
#import "HEFTTestdatabaseMasterViewController.h"
#import "HEFTData_Manager.h"

@implementation HEFTAppDelegate

@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        
        //ipad init
        
    } else {
        HEFTTestdatabaseMasterViewController *testDatabaseMasterViewController = [[HEFTTestdatabaseMasterViewController alloc]initWithStyle:UITableViewStylePlain];
        HEFTData_Manager *dataManager = [[HEFTData_Manager alloc]init];
        
        self.managedObjectContext = [dataManager mainObjectContext];
        
        // Pass the managed object context to the view controller.
        
        testDatabaseMasterViewController.managedObjectContext = self.managedObjectContext ;
        

    }
    return YES;
}

HEFTData_Manager クラスは、コンテキストなどを設定します

デバッガーを見ると、アプリのデリゲートでコンテキストが正しく設定されているように見えます。

testDatabaseMasterViewController.managedObjectContext = self.managedObjectContext ;

メッセージが発行されます。

ただし、テーブル ビューが表示されると、HEFTTestdatabaseMasterViewController managedObjectContext は NULL です。

何が起こっているのかについてのアイデアや指針は、ありがたく受け取られます。

デバッガ出力

で:

testDatabaseMasterViewController.managedObjectContext = self.managedObjectContext ;

testDatabaseMasterViewController    HEFTTestdatabaseMasterViewController
*   0x06d74b50 UITableViewController    UITableViewController    managedObjectContext   NSManagedObjectContext *    0x06d778e0
fetchedResultsController    NSFetchedResultsController *    0x00000000

で:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
   // NSManagedObjectContext *context = self.managedObjectContext;
    
    NSLog(@"context : %@",self.managedObjectContext);
    
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
    
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
    self.navigationItem.rightBarButtonItem = addButton;
    
}

self HEFTTestdatabaseMasterViewController *const 0x06d705a0 UITableViewController UITableViewController
UIViewController UIViewController
_tableViewStyle UITableViewStyle UITableViewStylePlain _keyboardSupport id 0x00000000 _staticDataSource id 0x00000000 _tableViewControllerFlags managedObjectContext NSManagedObjectContext * 0x00000000 fetchedResults0Controller *00Results0Controller NSFetchedResults0Controller

4

2 に答える 2

1

クラスのメソッドmanagedObjectContext内でプロパティを割り当てる必要があります。または、編集する必要のないライブラリファイルの場合は、プロパティをサブクラス化してカスタムクラスに設定するだけです。viewDidLoadHEFTTestdatabaseMasterViewControllerviewDidLoad

于 2012-05-25T16:57:56.783 に答える
0

追加した:

id appDelegate = (id)[[UIApplication sharedApplication] デリゲート]; self.managedObjectContext = [appDelegate managedObjectContext];

HEFTTestDatabaseMasterVIewController の viewDidLoad メソッドへ

managedObjectContext へのアクセスが必要な他のクラスでも動作し、動作します。

于 2012-05-26T14:54:51.897 に答える