我有一个核心数据财务应用,需要累积每个产品的Trans Entity中包含的销售数量,然后将总计更新为产品实体的相应属性。
我能够通过嵌套for(transArray)内部和tableView(产品)来实现这一点。
但是,我需要先根据结果对tableView
进行排序和格式化。
一般问题:可以使用不带 tableViews获取结果吗?
- (void)calculateAmounts {
NSIndexPath *indexPath=0;
for (Product *product in self.fetchedResultsController.fetchedObjects){ // All product records
selectedProduct = [self.fetchedResultsController objectAtIndexPath:indexPath];
// >>>>>NSLog shows correct number of object, however selectedProduct @ Index Path Are NULL
for (id product1 in transProductArray) { // An array of all of the trans for product
if ((NSNull *)product1 == [NSNull null]) {
}
else if ([product1 isEqualToString:selectedProduct]) {
float qty = [@"1" floatValue];
NSNumber *numQty=[NSNumber numberWithFloat:qty]; // Update quantity sold in product by 1
NSNumber *quantity = [NSNumber numberWithFloat:([selectedProduct.quantitySold floatValue] + [numQty floatValue])];
selectedProduct.quantitySold = quantity;
[self.product.managedObjectContext save:nil];
}
} // Next Trans
} // Next Product
}
答案 0 :(得分:1)
这是一个很好的问题。不清楚地知道实现,我敢打赌 可以在tableview之外使用获取的结果。但是,NSFetchedResultsController文档概述将此作为第一行:
您使用获取的结果控制器来有效地管理结果 从Core Data获取请求返回以提供数据 UITableView对象。
虽然可以通过多种方式使用表视图,但可以获取结果 控制器主要用于帮助您获得主列表 图。
这表明两个对象是相互关联的,以提高效率和易用性。另外,还有一些监视器可以监视变化等。
你可能正在寻找的是一个普通的' NSFetchRequest
。 A tutorial.
答案 1 :(得分:1)
嗨,我不确定你是否还需要一个答案,但我自己也有同样的问题。我克服了自己关于这个问题的问题。
Display multiple core data entities objects in 1 Non-Table View Controller
我在我的VC中插入了一个小的tableview并将其设置为alpha并使用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
启用标签中的详细信息显示。
这是我克服它的唯一方法。希望这可以帮助。
答案 2 :(得分:0)
感谢您的回答。像很多事情一样,答案太容易了!这是关于获取,而不是tableview。只需获取一个数组,然后遍历数组以累积您的值:也可用于查找特定对象或输出到CSV。
NSError *error;
NSNumber *total=0;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"TransDetail" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (TransDetail *trans in fetchedObjects) {
total = total + trans.amount;
}