我有下表,我想获取文件大小字段数据的总和,其中 isSelectedForSync标志将为YES。
这是 DigitalLibrary 表属性
表名:数字图书馆
属性及其类型:
- 数字图书馆 ID (NSNumber)
- 文件名(NSString)
- 连接类型(NSString)
- 文件大小(NSNumber - doubleValue)
- isSelectedForSync (NSNumber - BOOL)
- isSync (NSNumber - BOOL)
我想获取 isSelectedForSync 标志为YES的文件计数。还需要获取 isSelectedForSync 的 fileSize 的总和
我正在尝试低于 NSExpression,但没有得到我想要的。它也给了我错误。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"DigitalLibrary" inManagedObjectContext:self.managedObjectContext];
NSDictionary *entityDict = [entityDescription propertiesByName];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isSync == %@ && isSelectedForSync == %@",[NSNumber numberWithBool:NO], [NSNumber numberWithBool:YES]];
[fetchRequest setPredicate:predicate];
[fetchRequest setEntity:entityDescription];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToGroupBy:[NSArray arrayWithObjects:[entityDict objectForKey:@"connectType"], nil]];
//AllPhotoCount
NSExpression *countExpression = [NSExpression expressionForFunction:@"count:"
arguments:@[[NSExpression expressionForKeyPath:@"connectType"]]];
NSExpressionDescription *fileCountExpressionDescription = [[NSExpressionDescription alloc] init];
[fileCountExpressionDescription setName:@"filesCount"]; // Choose an appropriate name here!
[fileCountExpressionDescription setExpression:countExpression];
[fileCountExpressionDescription setExpressionResultType:NSInteger32AttributeType];
// //Selected Photo Count
NSExpression *selectedFileExpression = [NSExpression expressionForFunction:@"sum:"
arguments:@[[NSExpression expressionForKeyPath:@"isSelectedForSync"]]];
NSExpressionDescription *selectedFilesExpressionDescription = [[NSExpressionDescription alloc] init];
[selectedFilesExpressionDescription setName:@"selectionCount"]; // Choose an appropriate name here!
[selectedFilesExpressionDescription setExpression:selectedFileExpression];
[selectedFilesExpressionDescription setExpressionResultType:NSInteger32AttributeType];
NSString *shadowVar = @"";
//Sum Of FileSize which file selected
// NSExpression *keyPathSelectedFileSizeTotalExpression = [NSExpression expressionForKeyPath:@"fileSize"];
NSExpression *selectedFileSizeTotalExpression = [NSExpression expressionForFunction:@"sum:"
arguments:@[[NSExpression expressionForKeyPath:@"fileSize"]]];
NSExpression *totalselectedFileSizeExpression = [NSExpression expressionForSubquery:selectedFileSizeTotalExpression usingIteratorVariable:shadowVar predicate:[NSPredicate predicateWithFormat:@"isSelectedForSync == %@",[NSNumber numberWithBool:YES]]];
NSExpressionDescription *selectedFileSizeTotalExpressionDescription = [[NSExpressionDescription alloc] init];
[selectedFileSizeTotalExpressionDescription setName:@"selectedFileSizeTotal"];
[selectedFileSizeTotalExpressionDescription setExpression:totalselectedFileSizeExpression];
[selectedFileSizeTotalExpressionDescription setExpressionResultType:NSInteger64AttributeType];
[fetchRequest setPropertiesToFetch:@[[entityDict objectForKey:@"connectType"], fileCountExpressionDescription, selectedFileSizeTotalExpressionDescription]];
NSLog(@"2nd shadowVar:%@",shadowVar);
NSError* error = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
如果我删除'selectedFileSizeTotalExpressionDescription',上面的代码工作得很好,但需要如上所述的selectedFileSizeTotalExpressionDescription。
我对如何使用 NSExpression expressionForSubquery 方法感到非常困惑。
以下是包含在 DigitalLibrary 表中的数据:
+-----------+--------------------+--------------+------------+
|fileSize |isSelectedForSync |connectType |fileName |
+-----------+--------------------+--------------+------------+
|1000 |0 |Image |temp1.png |
+-----------+--------------------+--------------+------------+
|200 |1 |Image |tmp.png |
+-----------+--------------------+--------------+------------+
|400 |1 |Image |tmp23.png |
+-----------+--------------------+--------------+------------+
|20000 |1 |Video |test.mp4 |
+-----------+--------------------+--------------+------------+
|3000 |1 |Audio |temp2.mp3 |
+-----------+--------------------+--------------+------------+
|15000 |0 |Video |test12.mp4 |
+-----------+--------------------+--------------+------------+
|3500 |0 |Audio |temp12.mp3 |
+-----------+--------------------+--------------+------------+
我想要以下结果:
+----------------+-------------------+--------------+----------------+------------------+
|TotalFileSize |selectedFileSize |connectType |totalFileCount |selectedFileCount |
+----------------+-------------------+--------------+----------------+------------------+
|1400 |600 |Image |3 |2 |
+----------------+-------------------+--------------+----------------+------------------+
|35000 |20000 |Video |2 |1 |
+----------------+-------------------+--------------+----------------+------------------+
|6500 |3000 |Audio |2 |1 |
+----------------+-------------------+--------------+----------------+------------------+