-1

我正在开发一个应用内购买应用程序,在获得产品专业应用商店后,我试图将这些产品加载到 uitableview 中。问题是:当我获得产品列表时,我无法在表格中加载数据。当我使用静态值而不使用 reloadData 创建表时,一切正常。

除了加载桌子外,一切都运行良好

我的代码在哪里:

@synthesize products;
@synthesize productsTableView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{

    NSSet *productIndentifiers = [NSSet setWithObjects:@"Prod01",@"Prod02",@"Prod03",nil];
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIndentifiers];
    [productsRequest start];

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:TRUE];
    [super viewDidLoad];

}

- (void)viewDidUnload
{
    [self setProductsTableView:nil];
    [super viewDidUnload];

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - UITableViewDelegate

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return self.products.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   

    UITableViewCell *cell = nil;
    [self.productsTableView dequeueReusableCellWithIdentifier:@"Cell"];
    if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
        SKProduct *product = [self.products objectAtIndex:indexPath.row];
        cell.textLabel.text = product.localizedTitle;

    }

    return cell;
}

#pragma mark - SKProductsRequestDelegate 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSLog(@"%@", response.products);
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:FALSE];
    [self.productsTableView reloadData];

}


- (void)dealloc {
    [productsTableView release];
    [super dealloc];
}
@end
4

4 回答 4

0

您错过了将 SKProductsRequest 的结果添加到 self.products

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSLog(@"%@", response.products);
self.product = assign data here
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:FALSE];
    [self.productsTableView reloadData];

}
于 2012-10-09T21:47:28.383 回答
0

如果您的数据不在本地,但在某些服务器上,您应该使用这个 imo。

[tableView 开始更新];
[tableView insertRowsAtIndexPaths: arrayOfIndexPaths withRowAnimation: rowAnimation ];
[tableView endUpdate];

另外,我想指出您的单元重用标识符是错误的在一种情况下您有“Cell”,在另一种情况下您有“MyCell”

于 2012-10-09T21:48:25.807 回答
0

有几个问题。NeverBe 和 SP 已经注意到了一些。这是另一个主要的。

一个问题是在 cellForRowAtIndexPath 中:

您只是在新的单元格中设置数据。表格视图回收单元格,因此有些会跳过您的 if 语句。这些将无法正确设置。将您的单元设置移到 if 语句之外。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {   

        UITableViewCell *cell = nil;
        [self.productsTableView dequeueReusableCellWithIdentifier:@"Cell"];
        if(cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];

        }

        SKProduct *product = [self.products objectAtIndex:indexPath.row];
        cell.textLabel.text = product.localizedTitle;

        return cell;
    }
于 2012-10-09T21:48:39.613 回答
0

我看到的唯一有点奇怪的是您的 tableView:cellForRowAtIndexPath: 例程引用了 self.productsTableView。但是您已经一个 tableView 中——为什么您的 tableView 包含对另一个tableView 的引用?这很奇怪。

同样,您是否检查过 self.products 实际上包含在 tableView:cellForRowAtIndexPath: 和 tableView:numberOfRowsInSection: 中引用的产品?我不知道,因为您没有显示任何显示该 ivar 设置位置的代码。抛出一个 NSLog() 语句或放置一个断点,并确保它确实包含你认为它所做的事情。

于 2012-10-09T21:53:40.267 回答