所以我有一个指向PFUser
s-theUsers
的指针数组。我想查询我的Conversation
类中的一个键,该键恰好包含PFUser
s的数组。
所以问题是,我想找到Conversation
对象,这些对象只涉及我传递的用户。
我尝试了以下几行,但即使数组相同,它们也不会返回匹配项:
[conversationQuery whereKey:kWSConversationUsersKey containedIn:theUsers];
[conversationQuery whereKey:kWSConversationUsersKey containsAllObjectsInArray:theUsers];
我也尝试了一个简单的whereKey:equalTo
,但当然遇到了一个异常,说我不能直接比较数组。
以下是完整的查询:
- (PFQuery *)queryForConversation:(NSArray*)theUsers {
/////////////////////////////////
// First query for the conversation
PFQuery *conversationQuery = [PFQuery queryWithClassName:kWSConversationClassKey];
[conversationQuery whereKey:kWSConversationUsersKey containedIn:theUsers];
[conversationQuery whereKey:kWSConversationUsersKey containsAllObjectsInArray:theUsers];
[conversationQuery whereKey:KWSConversationLanguageKey equalTo:[[WSWordlistManager shared] languageTarget]];
[conversationQuery includeKey:kWSConversationMessagesKey];
// A pull-to-refresh should always trigger a network request.
[conversationQuery setCachePolicy:kPFCachePolicyNetworkOnly];
// If no objects are loaded in memory, we look to the cache first to fill the table
// and then subsequently do a query against the network.
//
// If there is no network connection, we will hit the cache first.
if (self.objects.count == 0 || ![[UIApplication sharedApplication].delegate performSelector:@selector(isParseReachable)]) {
[conversationQuery setCachePolicy:kPFCachePolicyCacheThenNetwork];
}
return conversationQuery;
}
我唯一的另一个想法是,我可以向Conversation
类添加一个键,这个键是一个指示有多少参与者的数字。那么我的两个约束可以是:
[conversationQuery whereKey:kWSConversationUsersKey containsAllObjectsInArray:theUsers];
[conversationQuery whereKey:kWSConversationNumUsersKey equalTo:[NSNumber numberWithInt:[theUsers count]];
这似乎是可行的,但我想知道是否有更容易的东西我错过了。
所以我的解决方法是:
+ (PFQuery *)queryForConversation:(NSArray*)theUsers {
/////////////////////////////////
// First query for the conversation
PFQuery *conversationQuery = [PFQuery queryWithClassName:kWSConversationClassKey];
[conversationQuery whereKey:kWSConversationUsersKey containsAllObjectsInArray:theUsers];
[conversationQuery whereKey:KWSConversationNumUsersKey equalTo:[NSNumber numberWithInt:[theUsers count]]];
[conversationQuery whereKey:KWSConversationLanguageKey equalTo:[[WSWordlistManager shared] languageTarget]];
[conversationQuery includeKey:[NSString stringWithFormat:@"%@.%@",kWSConversationMessagesKey,kWSMessageUserKey]]; // Double power pointer retrieval!
return conversationQuery;
}
在Conversation
类中,我有一个额外的key
,用于保存会话中的用户数。