簡體   English   中英

用於在不同類的UILabel上顯示PFObject的查詢解析指針-Objective-C

[英]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是指向字符串“ jarName”的解析類“ Jar”的指針。

解析持有字符串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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM