Objective-C では、コア データを使用してエンティティを取得していましたが、それらは NSArray として返されました。あまりにも頻繁にフェッチしていて、エンティティの戻り値を利用できることに気付きました。たとえば、Customer エンティティには多くの Invoices があり、Invoices には多くの ItemSolds があります。ここに私が使用しているいくつかのコードがあります:
NSError *error = nil;
// fetch all customers
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Customer"
inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
self.fetchedCustomers = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedCustomers == nil) {
NSLog(@"ERROR");
}
[fetchRequest release];
// end of customer fetch
これは単純なフェッチ リクエストで、fetchedCustomers は NSArray プロパティとして設定されます。次に、その関数を使用します。
self.fetchedInvoices = [[customerToView valueForKey:@"invoices"] allObjects];
これは機能し、請求書番号と日付をテーブルに適切に表示できます。ただし、次に使用します:
self.fetchedObjects = [[fetchedInvoices valueForKey:@"itemsSold"] allObjects];
後で、合計を追加しようとすると、次のようにします。
double price = [[[fetchedObjects objectAtIndex:i] valueForKey:@"Price"] doubleValue];
そして、次のエラーが表示されます。
-[__NSCFSet doubleValue]: unrecognized selector sent to instance 0x10228f730
ここに NSSet が関係しているのはなぜですか? 述語を使用して請求書とアイテムをフェッチした場合、問題はありませんでしたが、非常に非効率的でした。私はむしろここで何がうまくいかないのかを理解したいと思っています。どんな助けでも感謝します、ありがとう。
追加情報:
関心のある分野:
@interface Invoice : NSManagedObject {
@private
}
@property (nonatomic, retain) NSSet *itemsSold;
@end
@interface Invoice (CoreDataGeneratedAccessors)
- (void)addItemsSoldObject:(ItemSold *)value;
- (void)removeItemsSoldObject:(ItemSold *)value;
- (void)addItemsSold:(NSSet *)values;
- (void)removeItemsSold:(NSSet *)values;
@end