0

我有两个解析类,一个是“用户”,一个是用户输入一些评论的地方,比如“推文”。在“用户”类中,每个对象都有两列用户名和照片。在 tweets 表中,每个对象都有用户名和评论的信息。我需要根据用户名匹配合并这两个表的查询,最后应该有 3 列,用户名 - 照片 - 评论。如何在 xcode 中通过 swift 执行此操作?然后我将使用结果将其附加为数组并在表格视图单元格中显示它们。

4

3 回答 3

2

你应该看看 Parse 1-many 关系。在这里,您可以找到基于 Swift 的代码片段。

基本上,您不会通过关联用户名将用户的推文链接到该用户(这在 SQL 数据库中会发生)。您所做的是将用户对象分配给推文,然后当您有推文时,您可以访问其用户属性及其所有属性。

let user = PFObject(className:"TweetAuthor")
...
let tweet = PFObject(className:"Tweet")
tweet["..."] = ...
tweet["createdBy"] = user
...
let userTweets = PFQuery(className:"Tweet")
tweetQuery.whereKey("createdBy", equalTo: user)
tweetQuery.findObjectsInBackgroundWithBlock {
      (objects: [AnyObject]?, error: NSError?) -> Void in

    let aTweet = object![...]
    let picture = aTweet["createdBy"]["picture"]
    ...
}

希望这可以帮助。

编辑:

你应该如何使用上面的代码?

我假设在您的应用程序的某个地方,您创建了一条推文,并且您当前为它分配了一个“用户名”(和“profilePicture”等):

tweet["userName"] = user["username"]

与其分配用户名(字符串),不如为其分配完整的用户对象:

tweet["createdBy"] = user

(删除所有代码以分配 profilePicture 等)

一旦你有了这个,你可以通过执行以下操作来获取与推文相关联的图片:

let picture = aTweet["createdBy"]["picture"]
于 2015-06-05T09:14:44.520 回答
0

我使用的下面的代码就是当前用户关注的人的信息,并显示他们的推文信息。但是,当用户更新用户表中的个人资料图片时,不会更新推文表(也包括个人资料图片)的过去数据。

函数刷新结果(){

    followArray.removeAll(keepCapacity: false)
    resultsNameArray.removeAll(keepCapacity: false)
    resultsUserNameArray.removeAll(keepCapacity: false)
    resulltsImageFiles.removeAll(keepCapacity: false)
    resultsTweetArray.removeAll(keepCapacity: false)
    resultsHasImageArray.removeAll(keepCapacity: false)
    resultsTweetImageFiles.removeAll(keepCapacity: false)
    resultsTweetType.removeAll(keepCapacity: false)

    var followQuery = PFQuery(className: "follow")
    followQuery.whereKey("user", equalTo: PFUser.currentUser()!.username!)
    followQuery.addDescendingOrder("createdAt")

    var objects = followQuery.findObjects()

    for object in objects! {

        self.followArray.append(object.objectForKey("userToFollow") as! String)

    }

    var query = PFQuery(className: "tweets")
    query.whereKey("userName", containedIn: followArray)
    query.addDescendingOrder("createdAt")

    query.findObjectsInBackgroundWithBlock {
        (objects:[AnyObject]?, error:NSError?) -> Void in

        if error == nil {

            for object in objects! {

                self.resultsNameArray.append(object.objectForKey("profileName") as! String)
                self.resultsUserNameArray.append(object.objectForKey("userName") as! String)
                self.resulltsImageFiles.append(object.objectForKey("photo") as! PFFile)
                self.resultsTweetArray.append(object.objectForKey("tweet") as! String)
                self.resultsHasImageArray.append(object.objectForKey("hasImage") as! String)
                self.resultsTweetImageFiles.append(object.objectForKey("tweetImage") as? PFFile)
                self.resultsTweetType.append(object.objectForKey("tweetType") as! Int)
                self.resultsTable.reloadData()

            }

            self.refresher.endRefreshing()

        }
    }

}
于 2015-06-05T10:12:07.067 回答
0

我无法弄清楚如何在解析另一个表中的对象时记录一列。正如你所说,我目前正在将用户名和照片分别记录为每条推文的列。推文代码如下。在解析中,我应该在推文表中为此创建一个新列吗?列的类型应该是什么?

var tweetObj = PFObject(className: "tweets")

    tweetObj["userName"] = PFUser.currentUser()!.username
    tweetObj["profileName"] = PFUser.currentUser()!.valueForKey("profileName") as! String
    tweetObj["photo"] = PFUser.currentUser()!.valueForKey("photo") as! PFFile
    tweetObj["tweet"] = theTweet

当我尝试将上面的代码更新为下面的代码时,我收到一个错误(我在 parse 中将列创建为名称为 createdBy 的对象类型)。

让用户 = PFObject(类名:“TweetAuthor”)

var tweetObj = PFObject(className: "tweets")

    tweetObj["userName"] = PFUser.currentUser()!.username
    tweetObj["profileName"] = PFUser.currentUser()!.valueForKey("profileName") as! String
    tweetObj["photo"] = PFUser.currentUser()!.valueForKey("photo") as! PFFile
    tweetObj["tweet"] = theTweet
    tweetObj["createdBy"] = user
于 2015-06-05T12:53:50.767 回答