在不使用TableView的情况下获取结果控制器objectAtIndexPath

时间:2014-04-15 13:51:41

标签: nsfetchedresultscontroller

我有一个核心数据财务应用,需要累积每个产品的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
}

3 个答案:

答案 0 :(得分:1)

这是一个很好的问题。不清楚地知道实现,我敢打赌 可以在tableview之外使用获取的结果。但是,NSFetchedResultsController文档概述将此作为第一行:

  

您使用获取的结果控制器来有效地管理结果   从Core Data获取请求返回以提供数据   UITableView对象。

     

虽然可以通过多种方式使用表视图,但可以获取结果   控制器主要用于帮助您获得主列表   图。

这表明两个对象是相互关联的,以提高效率和易用性。另外,还有一些监视器可以监视变化等。

你可能正在寻找的是一个普通的' NSFetchRequestA 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;
  }