0

別のエンティティからの関係を割り当てようとしているコア データ エンティティがあります。以下のコードを参照してください

#define kId @"id"

-(NSArray *)fetchObjectsForEntityName:(NSString *)entityName withPredicate:(NSPredicate *)predicate
{
    NSManagedObjectContext *newContext = [Helper generateNewContext];
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:newContext];
    NSFetchRequest *request = [NSFetchRequest new];
    [request setEntity:entity];
    if (predicate)
        [request setPredicate:predicate];
    NSError *error = nil;
    NSArray *resultArray = [newContext executeFetchRequest:request error:&error];
    return resultArray;
}

-(void)updateCoreDataEntity
{
    NSArray *objectsArray = [self fetchObjectsForEntityName:@"FirstEntity" withPredicate:nil];

//FirstObjects is a subclass of NSManagedObject class (Custom entity)
//kId is just #define as defined above
//Recasting removed

        for (FirstObjects *firstObject in objectsArray) {
            if ([firstObject.id isEqualToString:[dict valueForKey:kId]]) {
                     secondEntity.firstEntity = firstObject; //debugger hangs here  
        }
    }
}

「FirstEntity」に属するオブジェクトを NSArray にフェッチしようとしています

その配列をループして、必要なオブジェクトを見つけます。

次に、基準が一致する場合は、「firstObject」を SecondEntity に割り当てます。

ただし、デバッガー (およびコード) がコードの最後の行でハングするため、このコードではどこにも行きません。

私がやっている間違いは何ですか、誰でもこのコードを手伝ってもらえますか?

よろしく、

分かりました

4

1 に答える 1

1

secondEntity未定義かもしれません。これは間違いなくクラッシュにつながります。

また、ID のロジックに欠陥があります。比較は特定の ID ではなく、一般的な文字列「id」と比較しているようです。おそらく、動的に割り当てられた ID と比較したいですか? また、これらの文字列 ID は一意ですか? (そうしないと、予期しない結果になる可能性があります。)

最後に、ヘルパーが常に同じ管理対象オブジェクト コンテキストを提供するかどうかは、コードからは明確ではありません。これは強くお勧めします - 別々のコンテキストは主に並行性のために使用されます。

于 2013-02-11T22:39:23.390 に答える