2

私はこの質問と同じ問題を抱えていますが、@ davedelongの答えはうまくいきません。

Apple Exampleに従うと、オブジェクトのセットで最小の日付を取得するために、次のエラーが発生します

-[NSDate count]: unrecognized selector sent to instance

私の理解では、それはNSExpression最大です: のみをサポートしNSArrayます。だから私は別の解決策が必要です。

@davedelong は昇順を使用することを提案したNSSortDescriptorので、私はそうしました:

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([GCSession class])
                                  inManagedObjectContext:self.objectContext];
fetchRequest.fetchLimit = 1;

NSSortDescriptor* sort = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:YES];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];

GCSession* session = [[self.objectContext executeFetchRequest:fetchRequest error:nil] lastObject];

return session.startDate;

ここでの問題はsession、フェッチから返されたオブジェクトが、最小のオブジェクトではないように見えることstartDateです。私のテストでは、最新の日付も返されたようですが、一貫していないようです。

すべてのオブジェクトを取得してGCSession並べ替えることもできますが、これはやり過ぎのように思えます。特にGCSession、ユーザーがアプリケーションを使用するときに数が増えることになります。

編集: Apple のサンプル コードのバグを示すテスト プロジェクト。

4

1 に答える 1

3

並べ替えは、オブジェクトを取得した後でのみ機能します。フェッチ制限を 1 に設定し、フェッチに「任意の単一の GCSession オブジェクトをランダムに取得する」ように指示する述語を設定しませんでした。フェッチに1要素の長さの配列がある場合、それをソートしますが、これは役に立ちません。

並べ替えを使用して最小値または最大値を見つけたい場合は、すべてのオブジェクトを取得してから並べ替える必要があります。行の削除:

fetchRequest.fetchLimit = 1;

...コードが機能するようにする必要があります。

ただし、式を使用して最小値と最大値を取得できるはずです。みたいな基本操作です。

編集: 詳細についてはコメントを参照してください。ただし、バッキング ストアを XML ではなく SQL に変更すると、Apple の例が機能します。

于 2011-09-02T05:30:55.977 に答える