2012-04-11 5 views
-1

В моем приложении у меня есть сущности категории и под_категории, которые имеют между собой отношение между многими.Взаимосвязь между объектами не сохраняется

Во-первых, когда приложение запускается в первый раз атрибут соотношение (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"; 
}) 

Но когда я выйти из приложения в рестарт приложения, что отношения действительно существует. Вывод выглядит следующим образом ..

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. Даже показывая связь между ними, когда приложение работает в первый раз. Но, когда я выхожу из приложения и выбираю объект Category, значение отношения не существует. Это показывает что-то вроде: «<связь: 0x6e84890 'category_SubCategory'>" – prasad1250

ответ

1

Я Похоже, что вы используете dispatch_async сделать -save: в задний план. Это, вероятно, нарушает правила «ограничения по контенту» для работы с NSManagedObject (короче говоря, они должны использоваться только в потоке, на котором они были созданы. То же самое относится к любым предметам, полученным от них).

Дополнительную информацию о том, как выполнять параллелизм с основными данными, см. this WWDC Session.

Попробуйте использовать только основной стек данных (и любые объекты, извлеченные из него) из основного потока.

+0

Я попытался удалить эти dispatch_queue также ... но то же самое происходит ... – prasad1250

Смежные вопросы