8

これは最も奇妙なエラーです。インターネットは、これがTigerをターゲットにすることに関する問題であることを示唆しています。私が実際にiOS3と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)}

このエラーが発生する前に大量のデータをCoreDataに追加していますが、2回保存しています(途中で1回、最後でもう一度)。最初の保存後はすべて問題ありません。問題の原因は2番目の保存なので、最初の保存の後、2番目の保存の前に使用しているコードを投稿します。

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サブクラスで呼び出している便利なメソッドはここにあります。

上記で参照したすべてのエンティティを追加/編集/削除できるメソッドがアプリの他の場所にあります(これが実行されてからずっと後)。エラーは毎回同じエンティティで発生するわけではありません。

どんな助けでも大歓迎です!これはトリッキーなものです。

4

3 に答える 3

13

次の状況でこのエラーが発生しました。

  • CoreDataモデルで構成を使用しています。各エンティティは特定の構成に割り当てられます。
  • 新しいエンティティを追加し、それを構成の1つに割り当てるのを忘れました。
  • それはココアエラーを引き起こすようです:134020。

新しいエンティティを構成に追加すると、すべてが正常に機能します

于 2012-07-23T10:59:27.573 に答える
12

Google経由でこのページを見つけた他の人のために:私は上記の解決策とは関係のない原因で同様の問題を抱えていました。

エラーを引き起こしたコードは、既存のストアから同じ管理対象オブジェクトモデルを使用するストアをシードすることでした。

間違ったコードは

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

代わりに

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

これは冗長に見えるかもしれませんが、私にとってはエラーを取り除きました。

于 2012-12-03T21:53:45.813 に答える
1

さて、私は問題が何であるかを発見しました。

投稿する前のコードでは、RestKitのシーダーオブジェクトを使用してローカルのjsonファイルからデータベースをシードし、実行後にオブジェクトを追加し続けました。ただし、を呼び出すまで、実際にはオブジェクトをオブジェクトストアにコミットしませんfinalizeSeedingAndExit

その関数を呼び出してデータの最初の部分をシードし、次にシーダーをコメントアウトして再度実行すると、この奇妙で奇妙なエラーが修正されました。

于 2011-08-04T21:29:04.797 に答える