2012-04-11 24 views
-1

私のアプリケーションでは、to-manyリレーションシップを持つCategoryおよびSub_Categoryエンティティがあります。まずエンティティ間の関係は永続的ではありません

、以下に示すようにアプリケーションが関係属性(category_subCategory)が働いている初めて実行:

2012-04-11 04:03:39.344 SupplyTrackerApp[27031:12f03] Saved 
2012-04-11 04:03:47.423 SupplyTrackerApp[27031:fb03] Category<Category: 0x6ba4e90> (entity: Category; id: 0x6e95620 <x-coredata://00E5784E-D032-41DD-BD60-B85B0BBF8E31/Category/p1> ; data: { 
    categoryID = 1; 
    categoryName = Antiques; 
    "category_SubCategory" =  (
     "0x6ebb4f0 <x-coredata://00E5784E-D032-41DD-BD60-B85B0BBF8E31/Sub_Category/p1>" 
    ); 
    catetogoryDescription = "Contains a Sub categories related to Antique pieces"; 
}) 

しかし、私はアプリを終了ANアプリケーションを再起動すると、その関係が存在しません。出力は次のようになります..私はエンティティを作成呼んでいるところ

ここ
2012-04-11 04:05:04.455 SupplyTrackerApp[27038:fb03] In Cell for row at index path 
2012-04-11 04:05:05.548 SupplyTrackerApp[27038:fb03] Category<Category: 0x6ecaca0> (entity: Category; id: 0x6eb4ab0 <x-coredata://00E5784E-D032-41DD-BD60-B85B0BBF8E31/Category/p1> ; data: { 
    categoryID = 1; 
    categoryName = Antiques; 
    "category_SubCategory" = "<relationship fault: 0x6ecf0a0 'category_SubCategory'>"; 
    catetogoryDescription = "Contains a Sub categories related to Antique pieces"; 
}) 

が..です

-(void) loadDataIntoDocument{ 


    NSLog(@"In Load Data"); 

    dispatch_queue_t fetch=dispatch_queue_create("Data Fetcher", NULL); 

    dispatch_async(fetch, ^{ 



      [Sub_Category createSubCategory:context]; 


      NSError *error; 


      if (![context save:&error]) { 
       NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
      }else { 


       NSLog(@"Saved"); 
      } 


    }); 




    dispatch_release(fetch); 


} 

だからSub_Category +カテゴリーのファイルを作成し、次のコードを持っています。

+(Sub_Category *) createSubCategory:(NSManagedObjectContext *)context{ 


    Sub_Category *subCategory=nil; 

    NSFetchRequest *request=[NSFetchRequest fetchRequestWithEntityName:@"Sub_Category"]; 

    request.predicate=[NSPredicate predicateWithFormat:@"subCategoryID=%@", @"11"]; 

    NSSortDescriptor *sortDescriptor=[NSSortDescriptor sortDescriptorWithKey:@"subCategoryName" ascending:YES]; 

    request.sortDescriptors=[NSArray arrayWithObject:sortDescriptor]; 



    NSError *error; 

    NSArray *matches=[context executeFetchRequest:request error:&error]; 

    if (!matches||[matches count]>1) { 
     ///errorrrrrrrrrr 
    } else if([matches count]==0) { 


     subCategory=[NSEntityDescription insertNewObjectForEntityForName:@"Sub_Category" inManagedObjectContext:context]; 

     subCategory.subCategoryID=[NSString stringWithFormat:@"%i", 11]; 

     [email protected]"Antiquities"; 

     [email protected]"Contains several products related to antiquities"; 



     subCategory.subCategory_Category =[Category createCategory:context]; 

    }else { 
     subCategory=[matches lastObject]; 
    } 



    return subCategory; 



} 

次に、次のコードを持つカテゴリ+作成カテゴリファイルを呼び出しています。

+(Category *) createCategory:(NSManagedObjectContext *)context{ 


    Category *category=nil; 

    NSFetchRequest *request=[NSFetchRequest fetchRequestWithEntityName:@"Category"]; 

    request.predicate=[NSPredicate predicateWithFormat:@"categoryID=%@", @"1"]; 

    NSSortDescriptor *sortDescriptor=[NSSortDescriptor sortDescriptorWithKey:@"categoryName" ascending:YES]; 

    request.sortDescriptors=[NSArray arrayWithObject:sortDescriptor]; 


    NSError *error; 

    NSArray *matches=[context executeFetchRequest:request error:&error]; 

    if (!matches||[matches count]>1) { 
     ///errorrrrrrrrrr 
      } else if([matches count]==0) { 

       category=[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:context]; 

       category.categoryID=[NSString stringWithFormat:@"%d",1]; 

       [email protected]"Antiques"; 

       [email protected]"Contains a Sub categories related to Antique pieces"; 




      }else { 
       category=[matches lastObject]; 
      } 






    return category; 

} 

誰もこれについて私を助けることができます。..

私は数日からこの上こだわっている...

+0

私は間違っていることを正確に理解していません。 NSLog()はexecuteFetchRequestからエラーを出しますか?何か教えてください。 –

+0

executeFetchRequestの実行中にエラーが発生しません。アプリケーションが初めて実行されているときにも、それらの間の関係を示しています。しかし、私がアプリケーションを終了し、カテゴリエンティティをフェッチするとき、関係値は存在しません。 "" – prasad1250

答えて

1

あなたが-save:を行うにはdispatch_asyncを使用しているように私には見えますバックグラウンド。これはおそらくNSManagedObjectを扱うための「スレッドの閉じ込め」ルールに違反しているにすぎません(要するに、それらは作成されたスレッドでのみ使用する必要があります。

コアデータとの並行処理の詳細については、this WWDC Sessionを参照してください。

コアデータスタック(およびそれからフェッチするオブジェクト)のみをメインスレッドから使​​用してみてください。

+0

このようなdispatch_queueも削除しようとしましたが、同じことが起こっています... – prasad1250

関連する問題