1

これはよくある質問である必要があり、SO に関連する多くのものが見つかりましたが、これに対する解決策はありません。

これらの 2 つのコアデータ モデルがあります。

@class Message;
@interface Conversation : NSManagedObject
@property (nonatomic, retain) NSString * number;
@property (nonatomic, retain) NSSet *messages;
@property (nonatomic, retain) Message *lastMessage;

@class Conversation;
@interface Message : NSManagedObject
@property (nonatomic, retain) NSString * account;
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSString * message;
@property (nonatomic, retain) NSNumber * sentFlag;
@property (nonatomic, retain) NSString * status;
@property (nonatomic, retain) Conversation *conversation;

my では、ConversationListViewControllerで並べ替えられたすべての会話を取得しlastMessage.dateます。
次に、ConversationViewControllerは を受け取り、Conversationその を一覧表示しますmessages

今はlastMessage手動で処理しているので、新しいメッセージを追加するたびに、ConversationViewController も更新しconversation.lastMessageます。
それを行うより良い方法はありますか?
現在、新しいメッセージを挿入/更新する場所は 1 つしかないためですが、挿入/更新トリガーのようなものがあれば、より良い音になります..

すべての会話を取得して、並べ替え記述子を使用してそれらを並べ替えることができることはわかってmessages.@max.dateいますが、それはメッセージ/会話の大規模なプールには適していないように思えます。

4

1 に答える 1

0

よりエレガントな方法やより良い方法があるとは本当に思いませんnewMessage.conversation.lastMessage = newMessage。Core Data は、エンティティを追加または変更するたびに通知を投稿しますが、新しいメッセージを作成するたびにこのコード行を追加して、それらを観察する方が簡単だとは思いません。

于 2012-04-16T13:18:29.333 に答える