チャット メッセージのリストを含む NSMutableArray をフィルター処理して並べ替えようとしています。2 人のユーザー間の会話の最後のメッセージを取得しようとしています。たとえば、user1 が 2 人の別々のユーザーと 2 つの異なる会話をしている場合、それらの会話のそれぞれの最後のメッセージを取得したいと考えています。私は Parse.com をバックエンドとして使用しています。これは、メッセージを保存および取得する方法です。
メッセージを保存する
PFUser *user = [[PFUser currentUser] objectForKey:@"displayName"];
PFObject *newMessage = [PFObject objectWithClassName:@"Messages"];
[newMessage setObject:messageStr forKey:@"body"];
[newMessage setObject:self.mySelectedUser forKey:@"toUser"];
[newMessage setObject:user forKey:@"fromUser"];
[newMessage saveInBackground];
myMessageField.text = @"";
[self getTheNewMessages];
[self.myTView reloadData];
メッセージの取得
-(void)GetmyNewMessages
{
PFQuery *query1 = [PFQuery queryWithClassName:@"Messages"];
[query1 whereKey:@"toUser" equalTo:[[PFUser currentUser] objectForKey:@"displayName"]];
[query1 whereKeyExists:@"date"];
PFQuery *query2 = [PFQuery queryWithClassName:@"Messages"];
[query2 whereKey:@"fromUser" equalTo:[[PFUser currentUser] objectForKey:@"displayName"]];
[query2 whereKeyExists:@"date"];
PFQuery *query = [PFQuery orQueryWithSubqueries:[NSArray arrayWithObjects:query1, query2, nil]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSLog(@"Successfully retrieved %d chats.", objects.count);
[premessagesList removeAllObjects];
[premessagesList addObject:objects];
} else {
//Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
NSMutableArray の NSLog (premessageList)
( "<Messages:aS8tVIlsHc:(null)> {\n
body = hi;\n fromUser = cnn;\n toUser =FNC;\n
date = \"2012-09-19 02:40:29 +0000\";\n}",
"<Messages:CPCa6VBmf7:(null)> {\n
body = hello;\n fromUser = FNC;\n toUser =cnn;\n
date = \"2012-09-20 05:06:05 +0000\";\n}",
"<Messages:Jz1cILt18Y:(null)> {\n
body = whatsgood;\n fromUser = sleepy;\n toUser =cnn;\n
date =\"2012-09-20 05:06:05 +0000\";\n}",
"<Messages:lXretmE1uK:(null)> {\n
body = lol;\n fromUser = cnn;\n toUser =sleepy;\n
date =\"2012-09-20 05:13:16 +0000\";\n}",
NSSortDescriptor と NSPredicate を使用しようとしましたが、空のテーブルビューが表示されました。