0

我正在使用NSFetchedResultsController从Core Data填充UITableView。这些数据来自Mogenerator生成的名为MenuItem的NSManagedObject子类。 MenuItem实体的SectionID参数是NSNumber,这用于确定该项目应在表格视图内的哪个部分。Mogenerator with NSFetchedResultsController - 0部分

我对数据执行了测试提取并确认核心数据已正确填充。一切都很好。

NSFetchedResultsController按如下方式创建和sectionKeyNamePath设置为@ “sectionId”:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MenuItem" inManagedObjectContext:self.persistenceController.moc]; 
[fetchRequest setEntity:entity]; 
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"sectionId" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:@"rowId" ascending:YES]];  
NSFetchedResultsController *frc = nil; 
frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
              managedObjectContext:self.persistenceController.moc 
              sectionNameKeyPath:@"sectionId" 
                cacheName:nil]; 

的问题(和溶液):

利用该代码,这些部分没有被识别。 NSFetchedResultsController总是返回0.这在以前我手动创建NSMO子类时工作过,所以我认为它与Mogenerator有关。

如果我将sectionNameKeyPath更改为@“primitiveSectionId”,那么它就起作用。

希望这将有助于未来的某个人,但我不明白这里发生了什么。请有人可以解释为什么这解决了这个问题?

谢谢

回答

0

你为什么设置FRC为零?试试这个(它适用于我使用NSNumber属性):

使用mogenerator,您可以使用“[MenuItem entityName]”获取实体,并使用MenuItemAttributes.sectionId访问属性。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[MenuItem entityName]]; 
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:MenuItemAttributes.sectionId ascending:YES], [NSSortDescriptor sortDescriptorWithKey:MenuItemAttributes.rowID ascending:YES]]; 
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                     managedObjectContext:self.persistenceController.moc 
                     sectionNameKeyPath:MenuItemAttributes.sectionId 
                       cacheName:nil]; 

// Make sure you set your frc as the delegate 
frc.delegate = self; 

NSError *error = nil; 
if (![fetcher performFetch:&error]) { 
    /* 
    * Did you execute the request? 
    */ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 
NSLog(@"%lu", [frc.sections count]); 
相关问题