Core Data で実行したフェッチ結果から返される NSManagedObject 型のオブジェクトの NSArray があります。NSArray にはオブジェクトが含まれています。これは、クエリの後で NSArray の内容をコンソールに出力することで確認できるためです。ただし、私の問題は、クエリから取得したエンティティの種類のオブジェクトを使用して、この配列を高速に列挙できないことです。実行時に発生する正確なエラーは次のとおりです。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[My_Entity_Name countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0xa9f0090'
私が使用している for ループは、for ループ条件で壊れているため、実行することさえできません。
for (MyEntityType *entityType in self.entityArray) {
...
}
配列 self.entityArray を設定するために使用する実際のフェッチ コマンドは次のとおりです。
self.entityArray = [[Singleton sharedInstance] retrieveEntities:self.mainEntity.relationshipEntity.relationshipEntityId];
次に、これが私の retrieveEntity メソッドの外観です。
- (NSArray *)retrieveEntities:(NSNumber *)relationshipEntityAttributeId {
NSManagedObjectContext *context = [[DataEngine sharedInstance] managedObjectContext];
NSError *error;
// Create fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:ENTITY_NAME inManagedObjectContext:context];
[fetchRequest setEntity:entity];
// Create predicate
NSPredicate *pred = [NSPredicate predicateWithFormat:@"relationshipEntity.relationshipAttributeId == %@", relationshipEntityAttributeId];
[fetchRequest setPredicate:pred];
NSArray *items = [context executeFetchRequest:fetchRequest error:&error];
if ([items count]>0) {
return items[0];
} else {
return nil;
}
}
上記のエラーが発生するのはなぜですか?