1

AppDelegateから開始するコアデータデータベースがあり、そこでこれを実行します。

MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil] autorelease];

masterViewController.managedObjectContext = self.managedObjectContext;

このようにして、マスタービューでデータベースにアクセスできます。次に、他のクラスのコアデータにアクセスしたいので、次のようにします。

id delegateContext = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [delegateContext managedObjectContext];

しかし、情報を追加してアクセスすると、データベースの情報にアクセスしようとすると、コードのさまざまな部分でExcアクセスやその他のエラーが発生するため、コアを誤って使用した可能性がありますデータ、他のクラスからの情報にアクセスします。

多分私はdelegatecontextを解放する必要がありますか?...私はそれを使用したどのクラスでもそれを解放していません、そして私がそれを解放した場合、私はそれをどこで行いますか?

誰かが私を助けることができますか?

4

1 に答える 1

0

問題は、これらの2行で、id代わりにタイプのdelegateContextを取得NSManagedObjectContextして割り当てていることです。*context

id delegateContext = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegateContext managedObjectContext]; 

保存またはアクセスする必要があるときはいつでもこれらの行を追加して、からコピーするかmanagedObjectContextどうかを確認してください。 nilYESAppdelegate

 if (managedObjectContext == nil) 
 { 
    managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@",  managedObjectContext);
 }

これらの2行を削除して、私が提案している条件の場合は上記を追加してみてください。動作するはずです。

更新1:あなたが尋ねているように、私は グローバルプロパティにアクセスするためにAppdelegateのインスタンスを作成するためのステップに言及しています。

      #import "AppDelegate.h"

@implementationのインスタンスを作成した後Appdelegate

      AppDelegate *app;

メソッドでviewDidLoad..。

      app=(AppDelegate *)[[UIApplication sharedApplication]delegate];
于 2012-04-08T17:37:49.663 に答える