안녕 페치 된 결과 컨트롤러에서있는 위치에있는 술어에 의해 필터링 된 후 내 CoreData 데이터베이스에서 특성 (rowTotal) 합계 수 싶습니다. 그 결과는 주문의 부분합이됩니다.어떻게 NSPredicate로 필터링 된 coreData 속성을 합산 할 수 있습니까?
처음에는 tableCells에 표시되는 값을 어떻게 든 합계 할 수 있다고 생각했지만 100 개 항목에 대해 10 개의 tableCell 만있을 수 있으므로이 방법이 제대로 작동하지 않는다는 점을 읽었습니다.
섹션 헤더에 합계를 넣는 것과 관련된 비슷한 질문 (아래 링크)을 읽었습니다. 내가 그 변화를 원한다면 나는 합계를 표시하고 UILabel에 어떤 변화가 managedObjectContext에 발생하기를 원한다. 내가이 일을 얻을 수 있는지 확인하기 위해 내 코드에서 여러 위치에 그것을 시도
float subtotal = 0;
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
NSNumber *objectRowTotalNumber = [object valueForKey:@"rowTotal"];
float objectRowTotal = [objectRowTotalNumber floatValue];
subtotal = subtotal + objectRowTotal;
}
NSLog(@"Subtotal: %f", subtotal);
:
나는 다음과 같은 코드를 시도했습니다. 나는 성공하지 못했으며이 코드로 tableView에 데이터가 표시되지 않습니다. 나는 그것에게 나를 슬픔을주고있는 다음과 같은 선이라고 생각한다.
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects])
나는 실제로 새로운 관리 대상을 만들고 그것이 제자리에있는 것을 방해한다는 생각을 갖습니다. 여기
내 가져온 결과 컨트롤러- (NSFetchedResultsController *)fetchedResultsController {
NSLog(@"I'm inside the method fetchedResultsController");
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
OrderAppDelegate *appDelegate =
(OrderAppDelegate*) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Order" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Set the Predicate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"orderNumber == %@", orderNumberLabel.text];
NSLog(@"predicate is: %@",predicate);
[fetchRequest setPredicate:predicate];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
}
나는이 응용 프로그램에 적합한 코드를 사용하고 코드입니다? 내가 잘못하고있는 것을 볼 수 있니? 코드를 어디에 구현해야합니까?
모든 안내를 주시면 감사하겠습니다.
그냥 0으로 유지 double 값으로 동일하지만, 변화하는 정수 작업을 수행 할 수 있습니다 ... 정수를 기반으로하지만,있다 그 이유는 어떤 이유로 루프에서 코드를 실행하지 않는다는 것입니다. 따라서 소계는 설정 한 값으로 유지됩니다. 가져 오기 요청은 결과를 반환하고 추가 및 삭제할 수 있습니다. 모두 "rowTotal"속성이> 0이고 오류가 발생하지 않습니다. – msec
Ahhhh : D가 문제를 해결했습니다. for (self.fetchedResultsController fetchedObjects의 NSManagedObject * 객체)에서'self '를 제거하고 이제 의도 한대로 작동합니다. '자기'가 왜 내 자신의 이해를 위해서만 효과가 있었는지 내게 말할 수 있겠습니까? – msec
'self.fetchedResultsController '를 호출하면 자신이 직접 작성했거나 @ property/@ synthesize를 통해 작성한 액세서 메소드를 통해 FRC에 액세스하고 있음을 의미합니다. 그냥'fetchedResultsController'를 호출하면 접근자를 통하지 않고 FRC 인스턴스 변수 ("ivar")에 직접 액세스하는 것입니다. 귀하의 경우, 나는 왜 하나가 작동하는지 다른 하나는 모르겠다 - 뭔가 어쩌면 엉망입니다. – alexantd