Учитывая вашу модель данных и код, нет никаких причин, чтобы количество элементов ListItems в обоих местах было одинаковым, поскольку значения двух разных наборов объектов не обязательно перекрываются.
Первый счет задается этим кодом:
ListName *test = [results objectAtIndex:0];
[test.listItems count];
… который возвращает количество ListItems
объектов в отношении одного, конкретного и уникального ListName
объекта. У вас может быть один ListName
объект или сотни, каждый из которых может иметь произвольное количество связанных ListItems
объектов. Этот код будет считать только те, которые связаны с первым ListName
возвращенным объектом.
Второй счет определяется как:
NSFetchRequest *newReq = [[NSFetchRequest alloc] init];
NSEntityDescription *descr = [NSEntityDescription entityForName:@"ListItem" inManagedObjectContext:self.context];
[newReq setEntity:descr];
NSArray * results2 = [self.context executeFetchRequest:newReq error:&error];
NSLog(@"item count on items %i", [results2 count]);
… который возвращает нефильтрованный массив, содержащий каждый экземпляр ListItems
в постоянном хранилище, независимо от того, какие у них отношения.
Нет особой причины ожидать, что первый счетчик когда-либо совпадет со вторым, потому что он будет делать это только тогда, когда (1) у вас есть один объект ListNames
в магазине и (2) каждый существующий объект ListItems
находится в этих ListNames.listNames
отношениях.
Убедитесь, что не путаете сущности и управляемые объекты.
Кстати, вы почти всегда должны использовать взаимные отношения, например, если у вас есть ListNames.listItems
, вы должны иметь обратную ListItems.listName
.