[英]Query Parse Pointer for PFObject Display on UILabel in different Class - Objective-C
我已經把自己畫在一個角落,請幫忙!
解析類“訂單”保存用戶將產品添加到其包中時創建的數據,包括指向“ jarName”的PFObject指針,該PFObject指針指向帶有字符串“ jarName”的解析類“ Jar”。
我需要在UITableViewController“ BagTableViewController”上的PFTableViewCell“ OrderItemTableViewCell”上的UILabel中顯示字符串“ jarName”。 但是...這是我自己畫的一個角落...“ OrderItemTableViewCell”使用模型“ OrderItem”,但是“ jarName”不在OrderItem模型(或Parse Class)上,而是在Order模型和Parse上類“訂單”。
jarName是指向字符串“ jarName”的解析類“ Jar”的指針。
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包含視圖OrderItemTableViewCell,該視圖由與解析類OrderItem相關聯的OrderItem模型中的數據填充。
// 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;
}
所以,這是擦...
我需要使用Parse Class Order中的數據填充OrderItemTableViewCell內的UILabel,同時使用Parse Class OrderItem中的數據填充其他4個標簽。
// 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
因此,基本上,我在另一個類中有一個Pointer,我需要檢索該String並將其顯示為UILabel。
(1)如何從解析類順序中查詢指針“ jarName”,並使其從解析類“ Jar”中返回字符串“ jarName”?
(2)如何在OrderItemTableViewCell中的UILabel上顯示該字符串(由OrderItem模型填充...不包含字符串或指針)?
如果我正確理解了您的問題,則可以...調用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來獲取指針,則將引發錯誤,因為該值不存在,您需要在該指針對象FIRST上調用“ 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
}
}];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.