我有一个PFObject
,Account
,其中包含User
个数组,它们是PFUsers
的子类。 User
后面有一个NSDictonary
属性allowableApps
,它是NSDictionary
个数组,其数组包含PFObject
个。
所以作为结构:
帐户
var users: [User]
指向....
用户
// Each key is an array of AllowApp
var allowableApps: NSMutableDictionary
指向......
AllowableApp
var appName: String
var appURL: String
var isAllowed: Bool
我尝试在单个查询中将所有这些关系提取到AllowableApp
。我尝试过使用这样的.includeKey
:
accountQuery?.includeKey("users")
accountQuery?.includeKey("allowableApps")
哪个不起作用。我也试过了:
accountQuery?.includeKey("users.allowableApps.appName")
accountQuery?.includeKey("users.allowableApps.appURL")
accountQuery?.includeKey("users.allowableApps.isAllowed")
我尝试使用所有UITableView
个对象填充AllowableApp
但我收到此错误:
Key "appName" has no data. Call fetchIfNeeded before getting its value.
我理解,我需要在尝试访问appName
属性之前获取所有这些内容。 (我试图设置cellForRowAtIndexPath
)。
以下是我的完整查询:
let currentUser = User.currentUser()
let accountQuery = Account.query()
accountQuery?.whereKey("primaryUser", equalTo: currentUser!)
accountQuery?.includeKey("users.allowableApps")
accountQuery?.getFirstObjectInBackgroundWithBlock({ (account, error) in
if (error != nil) {
completion(users: nil, error: error)
}
else {
let users = (account as? Account)!.users
completion(users: users, error: nil)
}
})
我现在的想法是循环遍历调用AllowableApp
的{{1}}中的所有viewDidAppear
个对象。然后,一旦它们全部加载,我重新加载表数据。
这看起来非常混乱,也是一个常见的问题。有没有更优雅的解决方案,我只是没有看到?
答案 0 :(得分:0)
根据我的理解,你有以下结构:
首先将 NSMutableDictionary 更改为数组。 NSMutableDictionary是一个键值对,在解析时你应该创建一个字段。因此,您可以使用Array of AllowApps,它将起到同样的效果。
为了获取每个帐户中的所有帐户和用户以及每个用户允许的应用,您需要构建以下查询:
// You can do it with sub classing if you want
let query = PFQuery(className: "Account")
query.includeKey("users.allowableApps")
query.findObjectsInBackgroundWithBlock {
(objects: [PFObject]?, error: NSError?) -> Void in
}
现在为您的用户数组。如果您的用户阵列是需要登录应用的用户,则最好继承 PFUser 而不是 PFObject ,因为 PFUser 包含所有逻辑处理您应用中的用户。