2014-12-29 3 views
-1

Надеюсь, кто-нибудь может помочь мне получить этот код, работающий с Parse.com в приложении iOS.PFQuery текущих пользовательских объектов

У меня есть таблица, которая запрашивает класс Parse.com под названием Channel с 5 основными столбцами.

  • Один: "ObjectId"
  • Два: "владелец", который является указателем < _User (основной класс)>
  • Третье: "Название"
  • Четвертое: "О"
  • Пятый : «image»

    Мне нужно запросить в таблицу только те каналы «имя», «около» и «изображение», которые были созданы конкретным пользователем.

    В моем коде метод queryForTable не работает, когда я пытаюсь выполнить [query whereKey: @ "name" equalTo: [PFUser currentUser] .objectId] (в настоящее время прокомментировано ниже). Текущий ACL для всех столбцов - Public Read.

Мой текущий код выглядит следующим образом:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 


     self.parseClassName = @"Channel"; 

     //self.textKey = @"name"; 

     self.pullToRefreshEnabled = YES; 

     self.paginationEnabled = YES; 

     self.objectsPerPage = 5; 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 


#pragma mark - UIViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 



} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    //self.canSearch = 0; 

} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
} 

- (void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 
} 



#pragma mark - Table view data source 

//- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {// 
//#warning Potentially incomplete method implementation. 
// Return the number of sections. 
// return 0; 
//} 

//- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
//#warning Incomplete method implementation. 
// Return the number of rows in the section. 
//} 





#pragma mark - PFQueryTableViewController 



#pragma mark - Query 

- (PFQuery *)queryForTable 
{ 
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
    //[query whereKey:@"name" equalTo:[PFUser currentUser].objectId]; 
    query.cachePolicy = kPFCachePolicyCacheThenNetwork; 

    return query; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    MyChanTableViewCell *cell = (MyChanTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    // Configure the cell 
    PFFile *thumbnail = [object objectForKey:@"image"]; 
    PFImageView *thumbnailImageView = (PFImageView*)cell.showImage; 
    thumbnailImageView.image = [UIImage imageNamed:@"Image.jpg"]; 
    thumbnailImageView.file = thumbnail; 
    [thumbnailImageView loadInBackground]; 


    cell.mainTitle.text = [object objectForKey:@"name"]; 
    cell.detail.text = [object objectForKey:@"about"]; 


    return cell; 


} 


// Set CellForRowAtIndexPath 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *LoadMoreCellIdentifier = @"LoadMoreCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadMoreCellIdentifier]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:LoadMoreCellIdentifier]; 
    } 
    return cell; 
} 

// Set TableView Height for Load Next Page 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if([self.objects count] == indexPath.row) { 
     // Load More Cell Height 
     return 60.0; 
    } else { 
     return 80.0; 
    } 
} 
+0

Какое-либо значение в столбце имен равно идентификатору объекта? –

+0

Нет, значения в столбце имен являются строками, и есть столбец objectId со своими случайными значениями, назначенными Parse –

+0

Привет @LyndseyScott thanx для ответа. Нет, значения в столбце имен являются строками, и есть столбец objectId с его случайными значениями, назначенными Parse –

ответ

1

Вы хотите выводить name значения где owner является текущий пользователь, если я вас правильно понял:

[query whereKey:@"owner" equalTo:[PFUser currentUser]]; 

При сравнении с указателем вы сравниваете полный объект. Parse SDK под обложками конвертирует, что для правильного сравнения значений objectId и типов объектов вам не нужно беспокоиться об этом.

+0

Thnx @TimothyWalter работает! Совершенно сумасшедший, как это происходит в фоновом режиме. Несмотря на всю документацию Parse, этот запрос имеет тип PFRelational?Чтобы запросить список всех других пользователей, нет необходимости запрашивать реляционные, просто спросите User class правильно? Cheerzz –

0

Как видно из ваших комментариев, вы на самом деле не пытаетесь запросить , используя имя; вы пытаетесь выполнить запрос, чтобы получить имя объекта , используя objectID.

В вашем текущем cellForRowAtIndexPath: методе вы уже имеете доступ к свойству имени PFObject. Вам не нужно (и не может) указать, что вы хотите получить имя из запроса. Запрос всегда будет возвращен полностью PFObjects. Вам просто нужно указать правильный столбец, в котором искать в objectID ... и именно этот столбец называется «ObjectId» (не «имя»), например:

- (PFQuery *)queryForTable 
{ 
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
    [query whereKey:@"objectID" equalTo:[PFUser currentUser].objectId]; 
    query.cachePolicy = kPFCachePolicyCacheThenNetwork; 

    return query; 
} 
+0

Thnx @LyndseyScott ваше объяснение помогло мне разобраться в разделении построения запроса и доступа к PFObject в таблице. Ура !!! –

+0

@LorencoGonzaga Рад, что у вас есть несколько хороших решений :) –

+0

Да! ;) Надеюсь на других! –

0
PFQuery *queryuser = [PFUser query]; 
    [queryuser whereKey:@"objectId" equalTo:[PFuser CurrentUser].objectId]; 
    [queryuser findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

     NSString *name = [objects valueForKey:@"name"]; 
     NSLog(@"%@",name); 




    }]; 

Надеется, что это будет работать для тебя.