0

と呼ばれる複雑なオブジェクトの NSSet がありますmessages。すべてのメッセージにはプロパティがありますdateCreated

私は単にdateCreated効率的な方法で最大のメッセージを取得しようとしています。

KVC を使用して最大日付を取得できます。 NSDate *d = [messages valueForKeyPath:@"@max.dateCreated"];

最大値を要求し、正しい値を選択するメッセージに対してループするのは間違った方法だと思います。

私のオブジェクトが Core Data からのものであることが助けになるのでしょうか? 何か案は?

4

3 に答える 3

2

Core Data を使用している場合は、フェッチ リクエストを実行し、作成日で並べ替えて、最初のアイテムを返す必要があります。このコードはテストされていませんが、次のようになります。

- (MyEntity *)newestMyEntityInContext:(NSManagedObjectContext *)context
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"entity"];
    [request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"dateCreated"
                                                                ascending:NO]]];
    [request setFetchLimit:1];

    NSError *error = nil;
    NSArray *results = [context executeFetchRequest:request
                                              error:&error];

    if (!results) {
        NSLog(@"%@", error);
        return nil;
    }

    return results.count ? results[0] : nil;
}
于 2013-01-18T17:09:29.593 に答える
2

とにかくオブジェクトをループする必要があるため、高速列挙を使用してください。

// Find the object with the maximum value for dateCreated
// Of course, replace both NSObject's with the appropriate class
NSObject *maxObject;
for (NSObject *object in messages)
{
    if ([object.dateCreated laterDate:maxObject.dateCreated]))
        maxObject = object;
}
于 2013-01-18T17:11:09.900 に答える