如何发送数组列表以解析和检索它并在 UItableView 中显示它?

Posted

技术标签:

【中文标题】如何发送数组列表以解析和检索它并在 UItableView 中显示它?【英文标题】:How can I send a list of array to parse and retrieve it and show it in a UItableView? 【发布时间】:2015-05-26 13:03:37 【问题描述】:

我正在ios中开发一个聊天应用程序。我需要将currentUser的朋友添加到一个数组中,然后将其发送到解析并保存为数组。 因为用户应该只添加一次他们的朋友,然后我需要在那里做一些功能。 那么如何检查用户是否已添加为朋友以及如何检索朋友数组? 如果有人能给我一些建议,那么这对我来说会很有帮助,因为我是 iOS 和 Parse 的新手。

【问题讨论】:

你使用用户指针数组。 @MuhammadAdnan 抱歉,我无法理解您的建议。您能详细说明一下吗? 如果是单用户聊天,可以从好友表中获取好友信息。否则,您必须保留 PFuser 数组(参与聊天)。解析聊天表中的 1 列数组类型 @MuhammadAdnanyeah 我创建了一个名为 Friends 的列,但我不知道如何过滤已添加的用户 您在一个问题中提出了很多不同的问题。如果你把它分解,答案已经在这里了。 【参考方案1】:

您可以在 Parse 上创建一个联接表,其中存储谁是谁的朋友。 使用PFQuery,您可以过滤它以仅获取与某个人相关的朋友。你可以称这个表为“Friendship”,它存储了 2 个 User 对象,意思是,他们是朋友。

更新

您将拥有一个名为 Friendship 的 PFObject 子类。 Friendship 对象将包含 2 个东西,一个是 User,另一个是 Friend。两者都应该是PFUser 类型。

你不需要进入 parse 创建连接表,如果你在代码中创建一个新对象并保存它,parse 会为它创建一个表。因此,如果您创建第一个 Friendship 对象并保存它,则 parse 会将其保存在它自己的 Friendships 表中。

保存友谊就像这样:

- (void)addFriend:(PFUser *)friend 
    Friendship *friendship = [[Friendship alloc] init];
    friendship.user = self.user;
    friendship.friend = friend;
    [friendship saveInBackground];

这只是一个简单的例子。

从用户那里获取朋友列表:

- (void)fetchFriendsList 
    //create a query for friendships
    PFQuery *friendsQuery = [[PFQuery alloc] initWithClassName:[Friendship parseClassName]];
    //filter it to find only friends for the user
    [friendsQuery whereKey@"user" equalTo:self.user];
    [friendsQuery findObjectsInBackgroundWithBlock:^(NSArray *friendships, NSError *error) 
        if (!error) 
            //do something with the list of friendships
            self.friends = [friendships valueForKey:@"friend"];
            //the above line create an array with only the friend value of each Friendship object inside the array
         else 
            NSLog(@"error fetching friends: %@", [error description]);
        
    ];

查看好友是否已添加/存在:

- (void)friendExists:(PFUser *)friend withCompletionBlock:(void (^)(BOOL))completionBlock 
    //create a query for friendships
    PFQuery *friendsQuery = [[PFQuery alloc] initWithClassName:[Friendship parseClassName]];
    //filter it to find only friends for the user
    [friendsQuery whereKey@"user" equalTo:self.user];
    [friendsQuery whereKey@"friend" equalTo:friend];
    [friendsQuery findObjectsInBackgroundWithBlock:^(NSArray *friendships, NSError *error) 
        if (!error) 
            //if we get one result here, it means it already exists
            BOOL alreadyExists = friendship.count > 0;
            if (completionBlock)  //making sure there is a block as parameter
                completionBlock(alreadyExists);
            
         else 
            NSLog(@"error fetching friends: %@", [error description]);
        
    ];

您需要在其中设置一个块来处理结果,因为发出 PFQuery 请求不是即时的。 另外,当添加更多whereKey:时,它们被视为“AND”,这意味着它只会返回符合所有whereKeys的对象。

基本上就是这样。我假设您知道如何子类化 PFObject,如果不知道,您可以查看documentation。

【讨论】:

你能给我一些链接或者给我一些关于这个的例子吗?

以上是关于如何发送数组列表以解析和检索它并在 UItableView 中显示它?的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 Facebook 好友列表并将其保存以进行解析?

从数组向 UITable 添加行

从本地存储中一一检索数组列表

如何以单选按钮格式显示问题和答案的数组列表?使用 JSP 和 servlet

为啥 Facebook 在 iOS 中返回好友列表 0?如何检索 fb 好友列表并将其存储以进行解析?

如何检索存储在 select2 下拉列表中的数据?