0

我正在开发一个从 下载图像的简单应用程序Dribbble,但是在为我的集合视图重新加载数据时遇到问题。我设置了两个视图ViewDeck,中心是我的主视图,其中包含集合视图,另一个视图包含带有设置的表视图,从那里我试图在第一个视图中调用一个方法并在点击项目时重新加载数据但是它只是行不通。

我尝试使用按钮从主窗口调用相同的方法 - > 就像一个魅力,但从第二个窗口它只是不更新​​数据。

我试图以某种方式进行调试,似乎我的集合在调用重新加载时为空,不知道为什么。

设置视图控制器

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"tap");

    JKViewController *appDelegate = [[JKViewController alloc] init];
    appDelegate.dataHasChanged = YES;
    [appDelegate refresh];

    [self.viewDeckController closeLeftViewAnimated:YES];
}

主视图

- (void)refresh{

    NSLog(@"refresh");

    if(dataHasChanged)
    {
        switch (listType) {
            case 0:
                [self refreshWithList:SPListPopular];
                break;

            case 1:
                [self refreshWithList:SPListEveryone];
                break;

            case 2:
                [self refreshWithList:SPListDebuts];
                break;

            case 3:
                [self refreshWithList:SPListPopular];
                break;

            default:
                [self refreshWithList:nil];
                break;
        }

        dataHasChanged = NO;
        NSLog(@"Should refresh");
    }

    NSLog(@"%d", [self->shots count]);
    NSLog(@"Collection view: %@",self.collectionView.description);
    NSLog(@"self.list: %@",self.list);
    NSLog(@"List type: %d", listType);
}

这不起作用:/,但是当我从 MainView 中的按钮调用它时,它起作用了。

- (IBAction)changeList:(id)sender {
    [self refreshWithList:SPListDebuts];
}

有谁知道可能是什么问题?

编辑 - 已解决

获取 centerViewController 的正确实例

JKViewController *mainController = ((UINavigationController*)self.viewDeckController.centerController).visibleViewController.navigationController.viewControllers[0];
4

1 回答 1

0

您没有看到数据正在更新的原因是因为您正在创建一个新的视图控制器并告诉它刷新。这个新的视图控制器已经初始化,但没有添加到您的视图层次结构中。你想要做的是像这样向现有的视图控制器发送消息:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"tap");

    JKViewController *mainViewController = self.viewDeckController.centerViewController;
    mainViewController.dataHasChanged = YES;
    [mainViewController refresh];

    [self.viewDeckController closeLeftViewAnimated:YES];
}

另外,请注意我在修订版中更改了变量名。将 UIViewController 实例命名为“appDelegate”非常令人困惑。

于 2013-06-19T23:21:06.313 回答