coredata 错误,因为 sectionNameKeyPath 或 NSFetchedResultsController 处的分组数据

Posted

技术标签:

【中文标题】coredata 错误,因为 sectionNameKeyPath 或 NSFetchedResultsController 处的分组数据【英文标题】:coredata error because sectionNameKeyPath or grouping data at NSFetchedResultsController 【发布时间】:2011-12-28 04:01:22 【问题描述】:
2011-12-28 10:52:13.633 BadgerNew[663:707] CoreData: error: (NSFetchedResultsController) object <Business: 0x628c8e0> (entity: Business; id: 0x628c870 <x-coredata://8D661026-BBFA-4C41-B434-167800D925DD/Business/p88> ; data: 
    Aliases = "<relationship fault: 0x6219950 'Aliases'>";
    Bookmark = 0;
    Building = nil;
    City = "0x56531a0 <x-coredata://8D661026-BBFA-4C41-B434-167800D925DD/City/p1>";
    Distance = "104.6926812925746";
    Districts =     (
        "0x63bcb30 <x-coredata://8D661026-BBFA-4C41-B434-167800D925DD/District/p1>"
    );
    Email = nil;
    ID = 74318;
    Images = "<relationship fault: 0x621a130 'Images'>";
    InBuildingAddress = nil;
    LatitudeLongitude = "0x565c2e0 <x-coredata://8D661026-BBFA-4C41-B434-167800D925DD/LatitudeLongitude/p81>";
    Like = 0;
    OpeningHour = nil;
    Phones = "<relationship fault: 0x62196b0 'Phones'>";
    Price = 0;
    Promotions = "<relationship fault: 0x6219630 'Promotions'>";
    Rating = "0x565e800 <x-coredata://8D661026-BBFA-4C41-B434-167800D925DD/Rating/p81>";
    Reviews =     (
    );
    Street = "Jl. Duri Raya 73";
    Tags =     (
        "0x63c38b0 <x-coredata://8D661026-BBFA-4C41-B434-167800D925DD/Tag/p74>"
    );
    Tenants = "<relationship fault: 0x62194c0 'Tenants'>";
    TimeStamp = nil;
    Title = "Toko Guna Bangunan Jaya";
    URLs = "<relationship fault: 0x6219440 'URLs'>";
    Website = nil;
    Zip = 11510;
    pinAndLineNumber = 1;
    updated = 0;
) returned nil value for section name key path 'Building.Title'. Object will be placed in unnamed section

当我想在 NSFetchedResultsController 使用 sectionNameKeyPath:@"Building.Title" 对数据进行分组时,会出现此错误日志。像这样的

NSFetchedResultsController * FRC=[[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:[ThreadClass managedObjectContext] sectionNameKeyPath:@"Building.Title" cacheName:Nil]autorelease];

任何人都可以帮我解决这个问题,Building can be nil?因为我想展示类似的东西

【问题讨论】:

【参考方案1】:

我想出了答案。如果您按建筑物分组,则还必须按建筑物或建筑物位置排序。您的排序顺序必须与您的分组顺序相匹配。因此,您不能遇到同一“组”中的项目有单独排序的情况。

【讨论】:

【参考方案2】:

您应该做的第一件事是重命名您的关系和属性。我不知道如何,但通常属性名称和关系名称不能以大字母开头。通常 Xcode 中的模型编辑器会强制执行此操作。

现在你的实际问题:

与往常一样,解决方案不止一种。我尝试解释一种可能的解决方案:

确保 Building.Title 永远不会为零:您可以在控制器层或模型层中执行此操作。如果您在模型层中执行此操作,只需为此实体创建 NSManagedObject 的子类并创建一个新的只读属性,您可以将其称为“titleForDisplay”。在返回 Title 的值之前,只需检查它是否为 nil,如果是,则将其替换为表示 nil 值的本地化字符串。

【讨论】:

谢谢,我在 NSManagedObject 子类中使用了一个新的只读属性,它解决了我的“为部分名称键路径返回 nil 值”的问题。

以上是关于coredata 错误,因为 sectionNameKeyPath 或 NSFetchedResultsController 处的分组数据的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:找不到 NSEntityDescription 的唯一匹配项

保存到 CoreData 似乎有效,但它不是 Swift

NSFetchedResultsController、sectionNameKeyPath 和无数据日期的部分

Swift 和 CoreData 与自定义类作为可转换对象

NSFetchedResultsController:如何从实体的多对多关系中获取sectionName

sectionName TableView - 我做错了啥?