チャットアプリを作っています。メッセージは、次の形式のコア データを使用して保存されます。
@property (nonatomic, retain) NSDate * datetime;
@property (nonatomic, retain) NSString * text;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSNumber * sent;
@property (nonatomic, retain) NSNumber * read;
@property (nonatomic, retain) DBRoom *room;
@property (nonatomic, retain) DBUser *sender;
次に、チャット ルームのメッセージを取得する必要があります。私の元の実装は単純です:
self.messages = [Helper mutableArrayWithSet:self.currentRoom.messages sortKey:@"datetime" ascending:NO];
ヘルパー メソッドを使用する場所mutableArrayWithSet
+ (NSMutableArray *)mutableArrayWithSet:(NSSet *)set sortKey:(NSString *)key ascending:(BOOL)ascending {
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:ascending];
NSArray *array = [set sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
return array.mutableCopy;
}
次に、上位 10 件のメッセージを保持し、残りを削除します。ユーザーが履歴メッセージを取得するために上にスクロールすると、再度取得して 20 件のメッセージを保持します。
問題は、メッセージが多い場合、パフォーマンスに影響を与える可能性があることです。問題は だと思いますself.currentRoom.messages
。便利ですが、効率的ではありません。
「datetime で並べ替えられたメッセージのバッチ (20 日から 30 日まで) を選択する」、または「datetime で並べ替えられたバッチ サイズが 10 のメッセージの 3 番目のバッチを選択する」など、バッチごとにメッセージを取得する方法はありますか?
編集:
ドキュメントを読んだところ、次のことがわかりました。
"この機能を使用して、アプリケーション内のデータの作業セットを制限できます。fetchLimit と組み合わせて、任意の結果セットの部分範囲を作成できます。"