-4

这是我的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (isPurchased == NO) {

        return [UITableviewExample count];
        [UITableviewExample release];
    }
    else
    {
        return [UITableviewExample2 count];
        [UITableviewExample2 release];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        if (isPurchased == NO) {

            cell.textLabel.text = [UITableviewExample objectAtIndex:indexPath.row];
            [UITableviewExample release];
        }
        else {
            cell.textLabel.text = [UITableviewExample2 objectAtIndex:indexPath.row];
            [UITableviewExample2 release];

        }
    }

    return cell;
}

请问谁能帮帮我?应用内购买成功后,没有任何变化。如果我使用

-(IBAction)test
{
    if (isPurchased == yes) {
        buyButton.hidden = yes;
    }
}

效果很好。我尝试了两个应用程序,应用程序内购买,一切都很好,即使我用来隐藏,更改标签的文本,它工作,我怎样才能使 UITableView 的应用程序内购买工作?我想在应用内购买成功后更改行。我的错误在哪里?谢谢你。

4

2 回答 2

1

尝试为 tableView 调用 reloadData - 当您收到通知时,应用内购买已完成。

[tableView reloadData];

或动画:

[tableView reloadSections:0 withRowAnimation:UITableViewRowAnimationFade];
于 2012-09-01T06:44:29.847 回答
1

至少,对numberOfRowsInSection(代码永远不会到达release语句,但无论如何您不希望它)和cellForRowAtIndexPath(您正在执行不适当release的语句并且如果单元格曾经存在逻辑错误)进行了一些明显的编辑成功出队):

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (isPurchased == NO) {
        return [UITableviewExample count];
        // [UITableviewExample release];
    }
    else
    {
        return [UITableviewExample2 count];
        // [UITableviewExample2 release];
    }

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // this was in the above "if (cell == nil)" block, but should be outside of it

    if (isPurchased == NO) {
        cell.textLabel.text = [UITableviewExample objectAtIndex:indexPath.row];
        // [UITableviewExample release];
    }
    else {
        cell.textLabel.text = [UITableviewExample2 objectAtIndex:indexPath.row];
        // [UITableviewExample2 release];
    }

    return cell;
}

从风格上讲,您显然也有变量UITableviewExampleand UITableviewExample2,但作为良好的编程风格,变量名应该以小写字母开头,例如tableviewExampleand tableviewExample2

对于您问题的实质,您需要向我们展示这些NSArray(或NSMutableArray)对象是如何被初始化的。问题可能不在于上述代码,而在于这些数组的数量。

但是根据 Guntis 的出色观察,如果您的问题是在应用内购买后您没有看到表的变化,您可能需要执行reloadData.

于 2012-09-01T06:46:18.427 回答