0

チャットアプリを作っています。メッセージは、次の形式のコア データを使用して保存されます。

@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 と組み合わせて、任意の結果セットの部分範囲を作成できます。"

4

1 に答える 1

0

でこれを行うことができますNSFetchRequest - (void)setFetchBatchSize:(NSUInteger)bsize。リレーションシップで機能するかどうかわからないので、を使用する代わりに、エンティティを直接NSFetchRequestフェッチするように変更する必要があるかもしれません。Messageself.currentRoom.messages

于 2013-10-08T10:23:57.317 に答える