2011-08-04 38 views
5

这是最奇怪的错误。 The internet表明这是针对Tiger的问题;所不同的是,我居然中定位iOS 3和4核心数据:商店无法保存实体实例(可可错误:134020)

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)} 

我加入了大量的数据,以核心数据之前,我得到这个错误,但我又节省了两次(一次在中间,然后最后)。第一次保存后一切正常,这是导致问题的第二次保存,因此我将在第一次之后但在第二次之前发布我正在使用的代码。

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

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

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

回答

1

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

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

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

9

我有这个错误在以下情况:

  • 我用我的CoreData机型配置。每个实体都被分配到 的某种配置。
  • 我添加了一个新的实体,并忘记将它分配给其中一个配置 。
  • 这似乎导致可可错误:134020.

添加新实体的配置之后,一切工作正常

12

对于通过谷歌找到这个网页其他人:我有一个类似的问题原因与上述解决方案无关。

触发错误的代码是为使用现有商店中相同管理对象模型的商店进行种子播种。

的错误代码是

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

而是做

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

这看起来是多余的,但摆脱了错误的我。

+0

感谢这帮了我。它似乎不会修复它,但它确实。我唯一的猜测是核心数据在这方面存在一个缺陷。 – Andrew

+0

这个男人节省了我很多时间,完美的工作! – Shizam

+0

感谢您的提示! –