2016-08-12 32 views
0

我已將自己繪製到一個角落,我需要一些幫助!在不同類中的UILabel上顯示PFObject顯示的查詢分析指針 - Objective-C

解析類「訂單」包含用戶向他們的包中添加產品時創建的數據,包括指向包含字符串「jarName」的解析類「Jar」的「jarName」的PFObject指針。

我需要在位於UITableViewController「BagTableViewController」上的PFTableViewCell「OrderItemTableViewCell」上的UILabel中顯示字符串「jarName」。但是......這是我自己陷入的角落......「OrderItemTableViewCell」使用模型「OrderItem」,但「jarName」不在OrderItem模型(或Parse Class)上,它在Order模型上並且Parse類「訂單」。

Parse Class Order holding Pointer jarName

的JARname是一個指針解析類 「瓶」 字符串 「的JARname」。

Parse Class Jar holding String jarName

的PFObjet的JARname是在創建的UITableViewController

@interface ProductDetailViewController() 

{ 
    PFObject* _selectedJar; 
} 

"ProductDetailViewController" when a user selects the Product they want to purchase, select the jarName associated with that Product and then adds them to their bag using a UIButton. The view then pops to BagTableViewController. 

    // ProductDetailViewController.m  
    - (void)didSelectAddToBagButton:(UIButton *)addToBagButton { 
      if (![User currentUser]) { 
       [self showWarning]; 
      } else { 
       if (self.order) { 
        if ([self.order.items count] > 0) { 
         if ([self containsProduct:self.order.items target:self.product] > -1) { 
          int index = [self containsProduct:self.order.items target:self.product]; 
          NSMutableArray *eItems = [NSMutableArray arrayWithArray:self.order.items]; 
          OrderItem *foundItem = eItems[index]; 
          [foundItem setQuantity:foundItem.quantity+1]; 
          [eItems replaceObjectAtIndex:index withObject:foundItem]; 
          self.order.items = [eItems copy]; 
         } else { 
          [self.order addSingleProduct:self.product]; 
         } 
        } else { 
         [self.order addSingleProduct:self.product]; 
        } 
       } else { 
        self.order = [Order object]; 
        [self.order setCustomer:[User currentUser]]; 
        [self.order setOrderStatus:ORDER_NOT_MADE]; 
        [self.order addSingleProduct:self.product]; 
        [self.order setJarName:_selectedJar]; 

       } 
      } 

BagTableViewController保持由所述數據從相關聯的解析類OrderItem的OrderItem的模型填充視圖OrderItemTableViewCell。

// BagTableViewController.m 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
return 130; 
} 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return [self.order.items count]; 
} 

- (OrderItemTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    OrderItemTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BagItemCell" forIndexPath:indexPath]; 
    if (self.order) [cell configureItem:self.order.items[indexPath.row] tag:indexPath.row]; 
    else [cell configureItem:nil tag:100+indexPath.row]; 
     return cell; 
} 

所以,這裏是擦...

我需要填充OrderItemTableViewCell內一個UILabel與從剖析類訂單數據,而其他4個標籤正在從剖析類OrderItem的數據填充。

// OrderItemTableViewCell.m 

@interface OrderItemTableViewCell() 
@property (nonatomic, weak) IBOutlet UILabel *jarNameLabel; 
@property (nonatomic, weak) IBOutlet UILabel *nameLabel; 
@property (nonatomic, weak) IBOutlet UILabel *unitPriceLabel; 
@property (nonatomic, weak) IBOutlet UILabel *quantityLabel; 
@property (nonatomic, weak) IBOutlet UIStepper *quantityStepper; 
@end 

@implementation OrderItemTableViewCell 

    -(void)configureItem:(OrderItem *)item tag:(long)tag{ 
     if (item) { 

      self.nameLabel.text = item.product.name; 
      self.unitPriceLabel.text = [item.product friendlyPrice]; 
      self.quantityLabel.text = [item friendlyQuantity]; 
      self.quantityStepper.hidden = NO; 
      self.quantityStepper.value = item.quantity; 
      self.quantityStepper.stepValue = 1; 
      self.quantityStepper.tag = tag + 100; 
     } else { 
      self.nameLabel.text = @""; 
      self.unitPriceLabel.text = @""; 
      self.quantityLabel.text = @""; 
      self.quantityStepper.hidden = YES; 
     } 
    } 
@end 

所以基本上,我有一個指針在不同的類,我需要檢索和顯示字符串作爲UILabel。

(1)如何從Parse Class Order查詢指針「jarName」並讓它從Parse Class「Jar」返回字符串「jarName」? (2)如何在OrderItemTableViewCell(由OrderItem模型填充...不包含字符串或指針)的UILabel上顯示該字符串?

回答

0

如果我正確理解您的問題...... 您可以調用FetchIfNeeded來填充嵌套在PFObject中的指針對象。這個工作,我一直用它來填充指針,以及指針的指針內的對象和值......等等。你可以根據需要嵌套任意多的指針,只需在指針對象,等待完成,然後將對象設置在指針所在的位置。

例子:

PFObject * orderObjectFromOrderClass = [PFObject objectWithClassName:@"Order"]; 
[[orderObjectFromOrderClass objectForKey:@"jarName"] fetchIfNeededInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { 
    if (!error) { 
     [orderObjectFromOrderClass setObject:object forKey:@"jarName"]; 
    } 
}]; 

NSString * jarName = [[orderObjectFromOrderClass objectForKey:@"jarName"] valueForKey:@"jarName"]; 

重點注意:

如果你沒有使用FetchIfNeeded獲取指針那麼錯誤將被拋出,你需要首先是因爲所謂的「FetchIfNeeded」該指針對象值不存在。所以,如果你有一個帶指針的類,並且你沒有查詢那些使用PFQuery和「includeKey」的指針(根據你的需要有或沒有點符號),那麼你調用的PFObject將不會有這些指針對象的數據。如果你還沒有充實這些指針值,你必須調用FetchIfNeeded。

更新,定義的NSString裏面,像這樣以確保你有一個價值NSString的

PFObject * orderObjectFromOrderClass = [PFObject objectWithClassName:@"Order"]; 
    [[orderObjectFromOrderClass objectForKey:@"jarName"] fetchIfNeededInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) { 
     if (!error) { 
      [orderObjectFromOrderClass setObject:object forKey:@"jarName"]; 
      NSString * jarName = [[orderObjectFromOrderClass objectForKey:@"jarName"] valueForKey:@"jarName"]; 
      // set your cell lable text here to make sure there's a value for "jarName" from the pointer 
     } 
    }]; 
+0

太好了!我現在要試一試。謝謝你的迴應!我假設你在Cell中調用PFObject,然後將它推送到UILabel? –

+0

是的,你可以做到這一點,無論哪種方式,只要確保你調用該函數FIRST,而且,我會設置UILabel文本ONLY後該塊執行,所以創建標籤或任何,將其添加到子視圖或任何,然後設置該提取塊內的文本,以確保該對象中的文本具有來自後端的值 – Loxx

+0

讓我更新此代碼,以便知道我的意思 – Loxx