2014-10-05 39 views
0

我想用作我的應用程序的後端解析,並假設我有一個不同的餐廳,每個餐廳的菜單和每個菜單的不同產品的類,我有一個類Place,菜單,產品及的MenuItems:解析關係和搜索特定的pfQuery PFObject

MenuItem類有: 足尖菜單 指針產品

菜單類: 指針的地方

一旦選定餐廳要顯示所有產品爲餐廳: 我的代碼:

PFQuery *query = [PFQuery queryWithClassName:@"Places"]; 
    [query whereKey:@"name" equalTo:PlaceSelect]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     PFObject *Menu; 
     if (!error) 
     { 
      for (PFObject *ob in objects) 
      { 
       Menu = ob; 
      } 
     } 

     PFQuery *query1 = [PFQuery queryWithClassName:@"Menus"]; 
     [query1 whereKey:@"place" equalTo:Menu]; 
     [query1 findObjectsInBackgroundWithBlock:^(NSArray *objects2, NSError *error2) { 
      PFObject *MenuItems; 
      if (!error2) 
      { 
       for (PFObject *ob2 in objects2) 
       { 
        MenuItems = ob2; 
       } 
      } 

      PFQuery *query2 = [PFQuery queryWithClassName:@"MenuItems"]; 
      [query2 whereKey:@"menu" equalTo:MenuItems]; 
      [query2 selectKeys:@[@"product"]]; 
      [query2 findObjectsInBackgroundWithBlock:^(NSArray *objects3, NSError *error3) { 
       PFObject *Products; 
       if (!error3) 
       { 
        for (PFObject *ob3 in objects3) 
        { 
         Products = ob3; 
         NSLog(@" %@ ",Products); 
        } 

我得到相關的產品,但是當我想按類型進行過濾:飲料,起動器,等...它給了我所有的地方他們所有的產品...

PFQuery *retrievedDrink = [PFQuery queryWithClassName:@"Products"]; 
        [retrievedDrink whereKey:@"type" equalTo:@"drink"]; 
        [retrievedDrink whereKey:@"objectId" equalTo:Products.objectId]; 
        [retrievedDrink findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
         DrinksArray = [[NSArray alloc] initWithArray:objects]; 
         NSLog(@"numero de productos Drinks= %i ",[DrinksArray count]); 
        }]; 

在此先感謝,如果有誰知道的方式來更有效地請我想澄清我的疑慮

回答

0

擺脫這一行的

[retrievedDrink whereKey:@"objectId" equalTo:Products.objectId];

即返回所有對象。

您有一個不需要的對象的重複數組,並且還執行錯誤檢查。

這應該找到存儲在您的解析類的所有的飲料,它們存儲在名爲objects一個數組,並允許您查詢該陣列中的findObjectsInBackgroundWithBlock

PFQuery *retrievedDrink = [PFQuery queryWithClassName:@"Products"]; 
         [retrievedDrink whereKey:@"type" equalTo:@"drink"]; 
         [retrievedDrink findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
         if (!error) { 

          NSLog(@"numero de productos Drinks= %i ",[objects count]); 

         } 

         }];