查询指针数组匹配的位置



所以我有一个指向PFUsers-theUsers的指针数组。我想查询我的Conversation类中的一个键,该键恰好包含PFUsers的数组。

所以问题是,我想找到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,用于保存会话中的用户数。

最新更新