我把自己画成了一个角落,我需要一些帮助!
Parse Class“Order”保存用户将产品添加到其包中时创建的数据,包括用于“jarName”的PFObject指针,该指针指向具有字符串“jarName”的Parse类“Jar”。
我需要在位于UITableViewController“BagTableViewController”上的PFTableViewCell“OrderItemTableViewCell”的UILabel中显示字符串“jarName”。但是......这就是我自己画的角落......“OrderItemTableViewCell”使用模型“OrderItem”,但“jarName”不在OrderItem模型(或Parse类)上,它在Order模型和Parse上“订单”类。
jarName是指向字符串“jarName”的Parse Class“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,该视图由与Parse Class 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,而其他4个标签正由Parse Class 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的UILabel上显示该字符串(由OrderItem模型填充...不包含字符串或指针)?
答案 0 :(得分: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"在指针对象FIRST上,因为该值不存在。所以,如果你有一个带有指针的类,你就可以使用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
}
}];