如何按价格在产品购买中对产品进行分类?

时间:2012-01-31 03:53:50

标签: iphone objective-c ios in-app-purchase

首先,我从IAP获得了一些产品

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response  
{  
    [productDetailsList addObjectsFromArray: response.products];  
    [productDisplayTableView reloadData];  
}

如何按产品价格将它们放入uitableview中?谢谢。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    static NSString *GenericTableIdentifier = @"GenericTableIdentifier";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier];  
    if (cell == nil) {  
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                       reuseIdentifier:GenericTableIdentifier] autorelease];
    }   

    SKProduct *thisProduct = [productDetailsList objectAtIndex:row];
    NSUInteger row = [indexPath row];

    [button setTitle:localizedMoneyString forState:UIControlStateNormal];

    [cell.contentView addSubview:button];

    return cell; 
}

6 个答案:

答案 0 :(得分:14)

NSArray *products = [response.products sortedArrayUsingComparator:^(id a, id b) {
        NSDecimalNumber *first = [(SKProduct*)a price];
        NSDecimalNumber *second = [(SKProduct*)b price];
        return [first compare:second];
    }];

答案 1 :(得分:3)

Swift 2.1.1

public func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
    let unsortedProducts = response.products
    let products = unsortedProducts.sort{($0.price.compare($1.price) == NSComparisonResult.OrderedAscending)}
    for p in products {
        print("Found product: \(p.productIdentifier) \(p.localizedTitle) \(p.price.floatValue)")
    } ...

答案 2 :(得分:1)

Swift 3,无需self个变量。为我工作就像一个按从低到高的价格排序的魅力:

var validProducts = response.products
var productsArray = [SKProduct]()
for i in 0 ..< validProducts.count {
    let product = validProducts[i]
    productsArray.append(product)
}
productsArray.sort{(Double($0.price) < Double($1.price))}

答案 3 :(得分:0)

您要做的是在尝试阅读之前对NSArray进行排序。排序NSArray有很多选项,其中大多数都涉及创建自己的排序方法。你做了类似的事情:

[productDetailList sortedArrayUsingFunction:intSort context:NULL];

这将使用您指定的比较器方法。比较方法用来比较在时间两个要素,并且应该返回NSOrderedAscending如果第一元件比第二较小,NSOrderedDescending如果第一元件比第二大,并且NSOrderedSame如果元素是相等的。每次调用比较函数时,它都会将上下文作为第三个参数传递。这允许比较基于一些外部参数,例如字符排序是区分大小写还是不区分大小写,但这在您的情况下无关紧要。您必须实现的功能如下所示:

NSInteger intSort(id num1, id num2, void *context)

有关上述方法的更多信息,请查看documentation,它会给您一个示例。

因此,您可以像这样对数组进行排序,或者每次添加时都可以选择对数组进行排序。因此,每次添加对象时,都要自行进行排序,并确保将其放在正确的位置以保持数组始终排序。

根据您的需要,我会说保持阵列在插入时间不断排序是最佳选择,因此您不必在通过对数组进行排序来构建视图时浪费时间。这样做很简单,每次在数组中输入内容时,遍历数组直到找到价格大于想要输入的对象,然后在该位置之前插入对象。条目。

答案 4 :(得分:0)

在swift中

 var validProducts = response.products
        for var i = 0; i < validProducts.count; i++
        {
            self.product = validProducts[i] as? SKProduct
            self.productsArray.append(product!)
            println(product!.localizedTitle)
            println(product!.localizedDescription)
            println(product!.price)


        }
        self.productsArray.sort{($0.price < $1.price)}

答案 5 :(得分:0)

self.products = products!.sorted(by: { (item1, item2) -> Bool in
            return item1.price.doubleValue < item2.price.doubleValue
        })