首先,我从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;
}
答案 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
})