-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 beginUpdate];
[tableView insertRowsAtIndexPaths: arrayOfIndexPaths withRowAnimation: rowAnimation ];
[tableView endUpdate];

また、セルの再利用識別子が間違っていることを指摘したいと思います。ある場合には「Cell」があり、他の場合には「MyCell」があります

于 2012-10-09T21:48:25.807 に答える
0

いくつかの問題があります。NeverBe と SP はいくつか指摘しています。ここにもう一つの主要なものがあります。

1 つの問題は、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 に答える