2013-03-13 2 views
1

Фоновое:Основные данные: fetchedResultsController отношение «волшебно» установлено в ноль

  • Я работаю в приложении управления запасами.
  • Пользователи могут добавить товар на грузовик
  • При добавлении объекта, уже находящегося на грузовике, я просто хочу обновить его количество, а не добавлять его снова.
  • Это отношения взаимно-однозначные. На данный момент есть только один «грузовик» Image Description Here

Процесс Логика: После того, как номер пункта введен, искать его под Items. Если найдено, создайте соответствующий управляемый объект truckItem и сохраните его в словаре. Как только я собираюсь сохранить проверку контекста против всех truckInventory сохраненных объектов. Если элемент уже существует, то получите управляемый объект truckItem и добавьте количества, уничтожьте вновь созданный truckItem. Сохранить.

Задача: При проверке на хранящиеся на нем грузовые объекты он будет загружать всю информацию, но элемент будет установлен на ноль. (Примечание, ноль, а не). Следовательно, количество отражает правильное значение, но у нас больше нет соответствующего элемента.

Упрощенный код: Загрузка Inventory:

NSError *error; 
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TruckItems"]; 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
           initWithKey:@"item" ascending:YES]; 

[request setSortDescriptors:[NSArray arrayWithObject:sort]]; 

loadedInventoryResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self->context sectionNameKeyPath:nil cacheName:nil]; 

if(![loadedInventoryResultsController performFetch:&error]) { 
     NSLog(@"Error! %@", [error localizedDescription]); 
} 

Проверка против Сохраненный Inventory Упрощенный Код:

for(NSString *mpn in items) { 

    TruckItems *item = [items objectForKey:mpn]; 

    //This shows the right number of managedObjects, but the ones that are repeated show item = nil; 
    NSLog(@"Logged: %@", [loadedInventoryResultsController fetchedObjects]); 

    //Check to see if items are already in inventory. If they are update their quantities rather than adding them again. 
    for(TruckItems *loadedItem in [loadedInventoryResultsController fetchedObjects]) { 

     Items *storedItem = [loadedItem item]; //I am doing this just for testing: This comes back as nil. This is the problem as it comes nil 
     Items *scanned = [item item]; //Same here. 

       if([stored.manufacturerProductNumber isEqualToString:scanned.manufacturerProductNumber]) { 

        item.quantity = [loadedItem.quantity decimalNumberByAdding:item.quantity]; 

        [context deleteObject:loadedItem]; 
       } 
      } 
     } 
//Save context 

вопросы: Почему быть установленным на ноль? Как этого избежать?

Заранее спасибо.

+0

Если вы собираетесь создавать теги wikis с текстом с копированием и вставкой с другого сайта, пожалуйста, ** укажите источник, из которого вы копируете; в противном случае вы [плагиат текста] (http://meta.stackexchange.com/questions/137799/what-to-do-about-large-amounts-of-plagiarizing-in-tag-wikis). – LittleBobbyTables

ответ

1

Если найдено, создать соответствующий truckItem управляемый объект и сохранить его в словаре

«Соответствующий» объект truckItem должен быть только один, где item отношения заполняется соответствующим Items объекта. Поскольку у вас есть отношения «один-к-одному», это приведет к удалению значения item из любых других truckItem объектов, которые у вас есть.

добавить количество, уничтожить вновь созданный грузовикItem.

Это удаляет только объект truckItem с действительной ссылкой на элемент.

Вы не показываете код, в котором вы делаете truckItem, но так как вы ищете через Items, просто использовать onTruck свойства элемента - это будет ноль, если он не на грузовике, или объект truckItem, если он есть. В этот момент создайте новый элемент или обновите его.

+0

Вы знаете, я думал об этом, но я думал, что все отношения и проверка свойств произошли, когда контекст был сохранен, а не как созданные объекты управления. Спасибо, что разъяснил это. – Ares

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