2012-03-01 16 views
0

コアデータから配列を読み取ろうとしています。NSManagedObjectContextを使用してデータを読み取ることができません

-(NSArray *)getAges 
{ 
    NSArray *fetchedObjects = [[NSArray alloc] init]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSManagedObjectContext *context = nil; 
    context = [[NSManagedObjectContext alloc] init]; 
    @try { 
     NSPersistentStoreCoordinator *tempCordinator = (NSPersistentStoreCoordinator *)[(AppDelegate *)[[UIApplication sharedApplication] delegate] persistentStoreCoordinator]; 
      [context setPersistentStoreCoordinator:tempCordinator]; 

     NSError *error; 
     NSEntityDescription *entity = [NSEntityDescription entityForName:@"Age" 
                inManagedObjectContext:context]; 
     [fetchRequest setEntity:entity]; 
     fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"core data exception occured."); 
     fetchedObjects = nil; 
    } 
    [fetchRequest release]; 
    [context release]; 

    return fetchedObjects; 
} 

今すぐメインスレッドでは、IBActionメソッドでは、私はライン以下の記述は以下のように私のコードです。

[NSThread detachNewThreadSelector:@selector(loadAgesMethod) toTarget:self withObject:nil]; 

問題は、このメソッドは私に20個の要素の配列を返します。私は配列数20を見ることができますが、デバッガでは、配列のすべての要素に対して、私は '範囲外'と '要約利用不可'を参照してください。そして、この配列からオブジェクトを取得しようとすると、何も得られません。言及しなければならないことの1つは、私が上記のようにセカンダリスレッドからloadAgesMethodでこのメソッドgetAgesを呼び出すことです。これは私の必要条件です。また、私はメインスレッドからこの配列を取得しようとすると、私はすべてのデータを完全にokを取得します。

誰でも私に間違いがありますか?

お礼

答えて

0

すべてのNSManagedObjectにはNSManagedObjectContextプロパティがあります。これは、将来必要になったときに、オブジェクトのプロパティを遅延取得するために使用されます。このメソッドの最後に[context release]を呼び出すと、NSManagedObjectContextの割り当てが解除され、すべてのNSManagedObjectコンテキストプロパティはAgeオブジェクトに対してnilになります。

コンテキストの[context autorelease]を呼び出すと、メソッドの後にしばらく持続し、後でオブジェクトのプロパティを取得できます。これは、実行ループの最後に自動解放プールがなくなるまで持続することに注意してください。私はまだマルチスレッドのフェッチのよりよい解決策を考え出すことを試みています。

関連する問題