2

チャット メッセージのリストを含む 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 を使用しようとしましたが、空のテーブルビューが表示されました。

4

2 に答える 2

0

このタイプの問題では、いくつかの変数と高速反復を使用して、情報をゆっくりと調べて必要なものを取得します。

id lastChat = ni;
... temps 

for(OneChat in allChats) {
  do tests and set variables
}

Now I know the last chat.

PS: これを投稿しないことに決めましたが、長い間誰も返信がないのを見て、何もないよりはましだと感じました。これが私がこれを解決する方法です。

于 2012-09-26T00:23:36.090 に答える
0

結果を制限し、次のPFQueryようにそれ自体を並べ替えることができます。

[query1 orderByDescending:@"createdAt"];
query1.limit = 1;
[query2 orderByDescending:@"createdAt"];
query2.limit = 1;
于 2013-01-16T20:52:27.387 に答える