2015-09-04 2 views
0

У меня есть 1-много отношений, и я успешно помещаю в него данные. Проблема в том, что я не могу извлечь ее через атрибут отношения.Основные данные: Получить всех детей в отношениях от 1 до многих.

Мой ADD Код:

NSManagedObjectContext *context = [[CBICoreDataController sharedInstance] masterManagedObjectContext]; 
NSManagedObject *orders = [NSEntityDescription 
          insertNewObjectForEntityForName:@"UnsyncedOrders" 
          inManagedObjectContext:context]; 
    [orders setValue:[dictionary valueForKey:@"specialInstructions"] forKey:@"specialInstructions"]; 
[orders setValue:[dictionary valueForKey:@"poNumber"] forKey:@"poNumber"]; 
[orders setValue:[dictionary valueForKey:@"specialInstructions"] forKey:@"specialInstructions"]; 
[orders setValue:[dictionary valueForKey:@"deliveryDate"] forKey:@"deliveryDate"]; 
[orders setValue:[dictionary valueForKey:@"account"] forKey:@"account"]; 

NSMutableSet *muteSet=[orders mutableSetValueForKey:@"items"]; 

for (NSDictionary *dict in [dictionary valueForKey:@"items"]) { 
    NSManagedObject *items = [NSEntityDescription 
           insertNewObjectForEntityForName:@"UnsyncedOrderItems" 
           inManagedObjectContext:context]; 
    [items setValue:[dict valueForKey:@"arraykey"] forKey:@"arrayKey"]; 
    //Other Sets Here 

    [muteSet addObject:items]; 
} 

[orders setValue:muteSet forKey:@"items"]; 

    NSError *error; 
    if (![context save:&error]) { 
     NSLog(@"Error saving in writeToMenuCostingDetailsTable: %@", [error localizedDescription]); 
    } 

Что я для выборки сейчас, но это не работает:

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"arrayKey" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSEntityDescription *parent = [NSEntityDescription entityForName:@"UnsyncedOrders" 
      inManagedObjectContext:context]; 

NSEntityDescription *child = [NSEntityDescription entityForName:@"UnsyncedOrderItems" 
      inManagedObjectContext:context]; 


[fetchRequest setEntity:child]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orders == %@", parent]; 
[fetchRequest setPredicate:predicate]; 

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil]; 

NSError *error; 

[aFetchedResultsController performFetch:&error]; 
NSArray *fetchedObjects = [aFetchedResultsController fetchedObjects]; 

enter image description here

ответ

0

Ваше orders отношения относится к конкретного экземпляра UnsyncedOrders. Однако при попытке выполнить выборку, вы делаете это:

NSEntityDescription *parent = [NSEntityDescription entityForName:@"UnsyncedOrders" 
     inManagedObjectContext:context]; 
[...] 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orders == %@", parent]; 
[fetchRequest setPredicate:predicate]; 

Вы пытаетесь принести случаи, когда orders отношения указывает на UnsyncedOrders лица себя, а не те, которые относятся к конкретному экземпляру UnsyncedOrders. Это всегда будет терпеть неудачу. На самом деле есть хороший шанс, что если вы проверяете результат performFetch:, он возвращает NO и предоставляет вам некоторую ошибку, описывающую проблему.

Если вы хотите получить UnsyncedOrderItems, которые относятся к определенному экземпляру UnsyncedOrders, вам нужно использовать предикат, который относится к определенному экземпляру. Однако, если у вас уже есть этот экземпляр, вам не нужно извлекать его - просто спросите экземпляр UnsyncedOrders для значения его отношения items.

+0

Я взял базовый код и вводится его, но теперь я получаю я взял базовый код и добавлен, но теперь я получаю Нагрузочный приложение из-за неперехваченного исключением «NSInvalidArgumentException», причина: ключ «to-many» здесь не разрешен » *** Первый стек вызовов броска – user1079052

+0

NSEntityDescription * parent = [NSEntityDescription entityForName: @" UnsyncedOrders " inManagedObjectContext: context]; NSFetchRequest * request = [[NSFetchRequest alloc] init]; NSPredicate * predicate = [предикат NSPredicateWithFormat: @ "items ==% @", parent]; – user1079052

+0

[запрос комплектPredicate: предикат]; NSSortDescriptor * sortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @ "arrayKey" по возрастанию: YES]; [request setSortDescriptors: @ [sortDescriptor]]; [запрос setEntity: parent]; NSFetchedResultsController * aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: request managedObjectContext: context sectionNameKeyPath: nil cacheName: nil]; NSError * error = nil; – user1079052

0

Это решение, которое я в конечном итоге с помощью:

NSManagedObjectContext *context = [[CBICoreDataController sharedInstance] masterManagedObjectContext]; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"UnsyncedOrders" 
              inManagedObjectContext:context]; 
NSError *error = nil; 
[fetchRequest setEntity:entity]; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
for (UnsyncedOrders *info in fetchedObjects) { 
    [mutableArray addObject:info.items]; 
} 

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

  • Нет связанных вопросов^_^