【问题标题】:Mogenerator with NSFetchedResultsController - 0 sections带有 NSFetchedResultsController 的 Mogenerator - 0 个部分
【发布时间】:2015-09-24 09:07:54
【问题描述】:

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

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

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" 那么它可以工作。

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

谢谢

【问题讨论】:

    标签: objective-c uitableview core-data nsfetchedresultscontroller mogenerator


    【解决方案1】:

    为什么将 FRC 设置为 nil?试试这个(它适用于我使用 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]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多