2012-03-12 21 views
0

が最初に私は私のアプリの流れを、説明しましょうEXC_BAD_ACCESSスロー Coredata fetchedObjectsカウントは

私はユーザーがログインしている場合、私は、ログインコントローラが表示されない場合、私は-(void) viewWillAppear:(BOOL)animatedでこのチェックを行うチェックアプリを起動

。これで完璧に動作します。

私のloadViewで私のコードデータスタックにアクセスし、fetchedObjectsをテーブルビューで表示しようとしましたが、クリックされたセルのオブジェクトに関する詳細情報を表示するセルの1つをクリックします。

これは私がそれを行う方法です。

AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = [app managedObjectContext]; 
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sites" inManagedObjectContext:context]; 
NSError *error; 

[fetchRequest setEntity:entity]; 

fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 

ビューは、私は大丈夫に見えるデバッガ

(lldb) po fetchedObjects 
(NSArray *) $1 = 0x00352860 <_PFArray 0x352860>(
<NSManagedObject: 0x352550> (entity: Sites; id: 0x34c9b0 <x-coredata://7CD0A735-BC41-4E7A-8B07-C957E6096320/Sites/p1> ; data: <fault>) 
) 

に次のように取得する最初の時間をロードします。

これでviewWillAppearが呼び出され、ログインビューが表示され、ユーザーがログインしてログインビューがナビゲーションスタックからポップされた後、tableviewのcellforrowatindexpathが再び呼び出されます。取得

(lldb) po fetchedObjects 
(NSArray *) $3 = 0x00352860 [no Objective-C description available] 

これは私が理解していない、なぜデータは保持されませんか?

例外が

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [fetchedObjects count]; 
} 

fetchedObjectsにスローされますが、クラスのメンバーである、私はまだそれのためのリリースを持っていないと私は、その値を変更することはありませんか?

+0

あなたはARCを使用していますか? – jrturton

+0

いいえ私はそれを切り替えました... – Armand

答えて

1
fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 

自動リリースされたオブジェクトを返します。それが存在する場合、あなたはそれがたむろしたい場合は、あなたがそれを保持するか、またはあなたのretain編のプロパティアクセサを経由して、それを割り当てる必要があり、(これが好ましい方法です):

self.fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
+0

@property(非原子的、保持)NSArray * fetchedObjects;私はこれを試してみましたが役に立たない – Armand

+0

合成アクセッサを使用する必要があります。私の編集 – jrturton

+0

を参照してください。常にself.fetchedObjectsを介してアクセスしてください。直接変数を使用しないでください。この方法では、常に適切なメモリ管理が行われます。 – jrturton