2015-05-18 3 views
1

Загружаю данные пользователя из User класс из Парса в PFQueryTableViewController. Пользовательский класс представляет данные из Facebook. Теперь я не хочу загружать данные в PFQueryTable из зарегистрированных пользователей. Разрешается загружать все остальные пользовательские данные. Это мой запрос, но он все же загружает все данные из класса User. Какие-либо предложения?Запрос для PFQueryTableViewController

- (PFQuery *)queryForTable 
{ 
PFQuery *query; 
//[query whereKey:@"FacebookID" notEqualTo:[[PFUser currentUser] objectForKey:@"FacebookID"]]; 
//[query whereKey:@"username" notEqualTo:[PFUser currentUser].username]; 
if (self.canSearch == 0) { 
    query = [PFQuery queryWithClassName:@"_User"]; 
    [query whereKey:@"objectId" notEqualTo:[PFUser currentUser].objectId]; 
} else { 
    query = [PFQuery queryWithClassName:@"_User"]; 
    [query whereKey:@"objectId" notEqualTo:[PFUser currentUser].objectId]; 
    [query whereKey:@"username" matchesRegex:_searchbar.text]; 
} 
[query orderByAscending:@"createdAt"]; 
// If Pull To Refresh is enabled, query against the network by default. 
if (self.pullToRefreshEnabled) { 
    query.cachePolicy = 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 (self.objects.count == 0) { 
    query.cachePolicy = kPFCachePolicyCacheThenNetwork; 
} 
return query; 
} 

ответ

1

Причина это происходит, вы устанавливаете это ограничение [query whereKey:@"FacebookID" notEqualTo:[[PFUser currentUser] objectForKey:@"FacebookID"]]перед тем инициализации запроса. Переместите строку ниже код инициализации, и он будет работать.

Образец исправленный код:

- (PFQuery *)queryForTable 
{ 
PFQuery *query = [PFQuery queryWithClassName:@"_User"]; 
[query whereKey:@"FacebookID" notEqualTo:[[PFUser currentUser] objectForKey:@"FacebookID"]]; 
//[query whereKey:@"FacebookID" notEqualTo:[PFUser currentUser]]; 
if (self.canSearch != 0) { 
    [query whereKey:@"username" matchesRegex:_searchbar.text]; 
} 
[query orderByAscending:@"createdAt"]; 
// If Pull To Refresh is enabled, query against the network by default. 
if (self.pullToRefreshEnabled) { 
    query.cachePolicy = 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 (self.objects.count == 0) { 
    query.cachePolicy = kPFCachePolicyCacheThenNetwork; 
} 
return query; 
} 

Альтернатива:

Все классы PARSE имеют уникальный ключ, то objectId. Я предлагаю вам использовать это как ограничение в вашем запросе.

- (PFQuery *)queryForTable { 

    PFQuery *query = [PFUser query]; // [PFUser query] is same as [PFQuery [email protected]"_User"] 
    [query whereKey:@"objectId" notEqualTo:[PFUser currentUser].objectId]; 
    [query whereKey:@"username" matchesRegex:[NSString stringWithFormat:@"^%@", _searchBar.text] modifiers:@"i"]; // Case insensitive search 

    // ...other code... 

    return query; 
} 
+1

Спасибо за ваш ответ. Редактированный выше код и теперь он работает. –