【问题标题】:Core Data: Store cannot hold instances of entity (Cocoa Error: 134020)核心数据:商店不能保存实体实例(可可错误:134020)
【发布时间】:2011-10-20 06:44:38
【问题描述】:

这是最奇怪的错误。 The internet 表明这是针对老虎的问题;除了我实际上针对的是 iOS 3 和 4。

Error Domain=NSCocoaErrorDomain Code=134020 "The operation couldn\u2019t be completed. (Cocoa error 134020.)" UserInfo=0xc502350 {NSAffectedObjectsErrorKey=<PartRecommendation: 0x6a113e0> (entity: PartRecommendation; id: 0x6a0d0e0 <x-coredata:///PartRecommendation/tAE2B5BA2-44FD-4B62-95D7-5B86EBD6830014> ; data: {
    "_rkManagedObjectSyncStatus" = 0;
    name = "Thin canopy cover";
    part = nil;
    partRecommendationId = 6;
    partType = "0x6a07f40 <x-coredata:///PartType/tAE2B5BA2-44FD-4B62-95D7-5B86EBD683003>";
}), NSUnderlyingException=Store <NSSQLCore: 0x5f3b4c0> cannot hold instances of entity (<NSEntityDescription: 0x6d2e5d0>) name PartRecommendation, managedObjectClassName PartRecommendation, renamingIdentifier PartRecommendation, isAbstract 0, superentity name PartOption, properties {
    "_rkManagedObjectSyncStatus" = "(<NSAttributeDescription: 0x6d37550>), name _rkManagedObjectSyncStatus, isOptional 0, isTransient 0, entity PartRecommendation, renamingIdentifier _rkManagedObjectSyncStatus, validation predicates (\n), warnings (\n), versionHashModifier (null), attributeType 100 , attributeValueClassName NSNumber, defaultValue 0";
    name = "(<NSAttributeDescription: 0x6d37c10>), name name, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier name, validation predicates (\n), warnings (\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)";
    part = "(<NSRelationshipDescription: 0x6d2e660>), name part, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier part, validation predicates (\n), warnings (\n), versionHashModifier (null), destination entity Part, inverseRelationship recommendation, minCount 1, maxCount 1";
    partRecommendationId = "(<NSAttributeDescription: 0x6d2e6d0>), name partRecommendationId, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier partRecommendationId, validation predicates (\n), warnings (\n), versionHashModifier (null), attributeType 100 , attributeValueClassName NSNumber, defaultValue 0";
    partType = "(<NSRelationshipDescription: 0x6d2e720>), name partType, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier partType, validation predicates (\n), warnings (\n), versionHashModifier (null), destination entity PartType, inverseRelationship partRecommendations, minCount 1, maxCount 1";
}, subentities {
}, userInfo {
}, versionHashModifier (null)}

在收到此错误之前,我正在向 Core Data 添加大量数据,但我保存了两次(一次在中间,一次在最后)。第一次保存后一切正常,是第二次保存导致问题,所以我将在第一次保存之后但在第二次保存之前发布我正在使用的代码。

Landscape *landscape = [Landscape object];

Type *type = [Type object];
type.name = @"tree";

MeasurementType *caliperType = [MeasurementType object];
MeasurementType *heightType = [MeasurementType object];

InventoryTree *inventoryTree = [InventoryTree object];
inventoryTree.landscape = landscape;
inventoryTree.type = type;

Assessment *assessmentTree = [Assessment object];
assessmentTree.inventoryItem = inventoryTree;
assessmentTree.type = type;
[[inventoryTree mutableSetValueForKeyPath:@"assessments"] addObject:assessmentTree];

Measurement *caliper = [Measurement object];
Measurement *height = [Measurement object];
caliper.type = caliperType;
height.type = heightType;
[[assessmentTree mutableSetValueForKey:@"measurements"] addObjectsFromArray:[NSArray arrayWithObjects:caliper, height, nil]];

for (PartType *pType in [PartType allObjects]) {
    pType.type = type;
        Part *treePart = [Part object];
        treePart.partType = pType;
        [[assessmentTree mutableSetValueForKey:@"parts"] addObject:treePart];
        for (PartCondition *cond in pType.partConditions) {
            cond.partType = pType;
        }
        for (PartRecommendation *rec in pType.partRecommendations) {
            rec.partType = pType;
        }
}

我在 NSManagedObject 子类上调用的便捷方法可以在 here 找到。

我在应用程序的其他地方(运行很久之后)有方法可以添加/编辑/删除上面引用的所有实体。错误不会每次都发生在同一个实体上。

任何帮助将不胜感激!这是一个棘手的问题。

【问题讨论】:

    标签: objective-c ios core-data persistent-storage restkit


    【解决方案1】:

    我在以下情况下遇到此错误:

    • 我在我的 CoreData 模型中使用配置。每个实体都被分配到 一定的配置。
    • 我添加了一个新实体并忘记分配它 到其中一种配置。
    • 这似乎导致了 Cocoa 错误:134020。

    将新实体添加到配置后,一切正常

    【讨论】:

      【解决方案2】:

      对于通过 Google 找到此页面的其他人:我遇到了类似的问题,原因与上述解决方案无关。

      触发错误的代码是从现有商店播种使用相同托管对象模型的商店。

      错误的代码是

      NSManagedObject *newObj = [[NSManagedObject alloc] initWithEntity:[obj entity] insertIntoManagedObjectContext:moc]
      

      改为

      NSManagedObject *newObj = [[NSManagedObject alloc] initWithEntity:[NSEntityDescription entityForName:obj.entity.name inManagedObjectContext:moc] insertIntoManagedObjectContext:moc]
      

      这似乎是多余的,但对我来说消除了错误。

      【讨论】:

      • 谢谢这帮助了我。它似乎不会修复它,但它确实。我唯一的猜测是,Core Data 内部存在一个与此相关的错误。
      • 感谢您的提示!
      • 这为我在 ios10 中修复了一个错误 - NSManagedObject 上的新 init(context) 方法在迁移期间似乎不起作用
      【解决方案3】:

      好的,我发现了问题所在。

      在我发布之前的代码中,我使用 RestKit 的播种器对象从本地 json 文件中播种我的数据库,然后在它运行后继续添加对象。但在您调用 finalizeSeedingAndExit 之前,它实际上不会将对象提交到对象存储。

      调用该函数来为我的数据的第一部分播种,然后注释掉播种器并再次运行,修复了这个奇怪的、奇怪的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多