0

私は次のようなrootViewControllerを持っています:

ヘッダ:

@interface ParkingRootViewController : UIViewController {
    UINavigationController *navigationController;
    UIToolbar *toolbar;
    UIBarButtonItem *lastUpdateLabel;

    NSPersistentStoreCoordinator *persistentStoreCoordinator;
    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;
}

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIToolbar *toolbar;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *lastUpdateLabel;

@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@property (nonatomic, readonly) NSString *applicationDocumentsDirectory;

-(IBAction)selectHome:(id)sender;
//-(void)loadOverlays;
-(void)testCoreData;

@end

実装:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    //...

    [self testCoreData];

    //creating label in tool bar 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 20.0f)];
    label.text = @"last updated...";
    label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
    label.backgroundColor = [UIColor clearColor];
    label.textAlignment = UITextAlignmentCenter;
    //label.highlightedTextColor = [UIColor colorWithWhite:0.5 alpha:1.0];
    //label.highlighted = YES;
    label.font = [UIFont systemFontOfSize:13.0];
    label.userInteractionEnabled = NO;

    [lastUpdateLabel initWithCustomView:label];
    [label release];

    [self.view addSubview:self.navigationController.view];

    [self.navigationController.view setFrame:self.view.frame];

}

ただし、managedObjectModelをテーブルビューに転送してからマップビューに転送し、ユーザーが見たいものに応じてマップビューがクエリを実行できるようにする必要があります。私は(レシピから)次のようなアップルのサンプルコードを調べていました:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    recipeListController.managedObjectContext = self.managedObjectContext;
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}

それがappDelegateにあることは知っていますが、行が選択されたとき、または別のビューがスタックにプッシュされたときに同じことができると思いますよね?問題は、ビューのほとんどを次のようなペン先で構成したことです。

代替テキスト

このため、サブビューを追加するときにPermitListViewControllerに直接アクセスしないため、AppleがmanagedObjectModelを代替のviewController(この場合はPermitListViewController)に転送するために採用している同様の戦略を使用できません。誰かが私のmanagedObjectModelを私のPermitListViewControllerに取得する方法について何か考えを持っているなら。シェアしてください!前もって感謝します!

編集:私はmanagedObjectModelをシングルトンクラスに配置することを考えています。それについて皆さんはどう思いますか?良いプログラミングの練習?知っておくべきことはありますか?ありがとう。

4

2 に答える 2

1

なぜNSManagedObjectContextアプリデリゲートを持っていないのですか?そうすれば、すべてのView Controllerから簡単にアクセスでき、UIであるため、メインスレッドで実行されるため、同じMOCを共有できます。

于 2011-01-21T17:36:58.357 に答える
0

これを参照として使用して、managedObjectModelのシングルトンクラスを作成することになりました(「シングルトンインスタンスの作成」までスクロールダウンします)。

于 2011-03-01T21:27:49.670 に答える