Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 筛选包含消息列表的NSMutableArray_Ios_Uitableview_Nspredicate_Nssortdescriptor - Fatal编程技术网

Ios 筛选包含消息列表的NSMutableArray

Ios 筛选包含消息列表的NSMutableArray,ios,uitableview,nspredicate,nssortdescriptor,Ios,Uitableview,Nspredicate,Nssortdescriptor,我正在尝试对包含聊天消息列表的NSMutableArray进行筛选和排序。我正在尝试获取两个用户之间对话的最后一条消息。例如,如果user1与两个不同的用户有两个不同的对话,我希望获得每个对话的最后一条消息。我使用Parse.com作为后端,这是我保存和检索邮件的方式 保存消息 PFUser *user = [[PFUser currentUser] objectForKey:@"displayName"]; PFObject *newMessage = [PFObject objectWith

我正在尝试对包含聊天消息列表的NSMutableArray进行筛选和排序。我正在尝试获取两个用户之间对话的最后一条消息。例如,如果user1与两个不同的用户有两个不同的对话,我希望获得每个对话的最后一条消息。我使用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]);


        }


    }];
检索消息

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)

(“{\n
body=hi;\n fromUser=cnn;\n toUser=FNC;\n
日期=\“2012-09-19 02:40:29+0000\”;\n}“,
“{\n
body=hello;\n fromUser=FNC;\n toUser=cnn;\n
日期=\“2012-09-20 05:06:05+0000\”;\n}“,
“{\n
body=whatsgood;\n fromUser=sleepy;\n toUser=cnn;\n
日期=\“2012-09-20 05:06:05+0000\”;\n}“,
“{\n
body=lol;\n fromUser=cnn;\n toUser=sleepy;\n
日期=\“2012-09-20 05:13:16+0000\”;\n}“,

我试图使用NSSortDescriptor和NSPredicate,但我得到了一个空的tableview。

在这种类型的问题中,我会使用一些变量和快速迭代来遍历信息,并获得您需要的:

id lastChat = ni;
... temps 

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

Now I know the last chat.

PS:我决定不发布这篇文章,但当我看到很久没有人回复时,我觉得这总比什么都没有好。这就是我解决这一问题的方法。

在这种类型的问题中,我会使用一些变量和快速迭代来费力地浏览信息,并得到你需要的:

id lastChat = ni;
... temps 

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

Now I know the last chat.

PS:我决定不发布这篇文章,但当我看到很长一段时间后没有人回复时,我觉得这总比没有好。这就是我解决这个问题的方法。

你可以限制结果并像这样对
PFQuery
本身进行排序:

[query1 orderByDescending:@"createdAt"];
query1.limit = 1;
[query2 orderByDescending:@"createdAt"];
query2.limit = 1;

您可以限制结果并通过
PFQuery
本身进行排序,如下所示:

[query1 orderByDescending:@"createdAt"];
query1.limit = 1;
[query2 orderByDescending:@"createdAt"];
query2.limit = 1;