1

複数の属性をグループ化してカウントするために nsexpression を使用しています。取得結果は、ios 6 および ios 7 では正常に機能しますが、ios 5 では機能しません。

* キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: 'GROUP BY コンポーネントを含むクエリの SELECT 句には、GROUP BY または集計関数で指定されたプロパティのみを含めることができます (startDateTime は GROUP BY にありません)' *First throw call stack: (0x3689022 0x309bcd6 0x13357d9 0x133543e 0x13351f0 0x1334fc3 0x1334619 0x13340b0 0x133345d 0x13312fd 0x138432b 0x13841fc 0x1384051 0x3285951 0x3285e00 0x1383ff5 0x1383e6d 0x13312fd 0x144043f 0x3a55f 0x38fea 0x22c5a1e 0x2430323 0x3a796 0xc961 0x1b01c6 0xc572 0xc42a 0x1b0684 0x215b34 0x19dff2 0x215a8d 0x1b05cd 0xc142 0xf5c5 0x1b0684 0x215b34 0x19dff2 0x215a8d 0x1b05cd 0xd722 0x384b 0x21fc386 0x21fd274 0x220c183 0x220cc38 0x2200634 0x5177ef5 0x365d195 0x35c1ff2 0x35c08da 0x35bfd84 0x35bfc9b 0x21fcc65 0x21fe626 0x29ad 0x2915 0x1) 例外をスローして呼び出された終了

コードは次のとおりです。

NSPropertyDescription *propDesc = [properties objectForKey:@"partyId"];
NSExpression *partyid           = [NSExpression expressionForKeyPath:@"partyId"];
NSExpression *partyIdCount      = [NSExpression expressionForFunction:@"count:" arguments:[NSArray arrayWithObject:partyid]];

NSExpressionDescription *countPartyId = [[NSExpressionDescription alloc] init];
[countPartyId setExpression:partyIdCount];
[countPartyId setExpressionResultType:NSInteger64AttributeType];
[countPartyId setName:@"countResultPartyId"];

NSExpression *startDateTime = [NSExpression expressionForKeyPath:@"startDateTime"];
NSExpression *latestDateTime = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:startDateTime]];
NSExpressionDescription *dateTimePropertyDescription = [[NSExpressionDescription alloc] init];
[callDateTimePropertyDescription setExpression:latestDateTime];
[callDateTimePropertyDescription setExpressionResultType:NSDateAttributeType];
[callDateTimePropertyDescription setName:@"latestDateTime"];

NSPropertyDescription *sortDateGroup = [properties objectForKey:@"sortDate"];
NSPropertyDescription *userId = [properties objectForKey:@"userId"];

[fetchRequest setPropertiesToGroupBy:[NSArray arrayWithObjects:propDesc,sortDateGroup,userId, nil]];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:propDesc,dateTimePropertyDescription, sortDateGroup,userId,countPartyId, nil]];
[fetchRequest setResultType:NSDictionaryResultType];

時間によってもグループ化してほしいようですstartDateTime。複数のstartDateTimeが存在する可能性があり、そこから最新の「最大」時間が必要なため、グループ化は機能しません。驚くべきことに、ios 6 & 7 で動作します。それを達成する方法を知っている人はいますか? ありがとうございました。

4

1 に答える 1

0

expressionForFunction:@"max:"or expressionForFunction:@"min:"doenstはiOS 5 で動作します。クエリから除外する必要がありました。iOS 5の最大nsdateを取得するために2番目のクエリを実行しました。

于 2013-09-29T07:50:52.457 に答える