Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone cellForRowAtIndexPath:未调用_Iphone_Ios_Uitableview - Fatal编程技术网

Iphone cellForRowAtIndexPath:未调用

Iphone cellForRowAtIndexPath:未调用,iphone,ios,uitableview,Iphone,Ios,Uitableview,我的应用程序有两种状态:已登录和未登录,我有以下架构(大大简化): -包含搜索框和表视图的视图控制器。 -用于登录应用程序的ViewController B 流程如下: -用户未登录 -在堆栈上按下一个按钮。在视图中将出现中,我检查用户是否已登录,如果已登录,则会发出异步网络请求,完成后,会将网络数据加载到表中。但是,由于用户此时未登录,表视图为空 -用户点击搜索框;因为他没有登录,B被按下(在确认之后) -他在B中成功登录,然后按下一个按钮,弹出B并再次显示a -此时,由于他已登录,因此从视图

我的应用程序有两种状态:已登录和未登录,我有以下架构(大大简化):
-包含搜索框和表视图的视图控制器。
-用于登录应用程序的ViewController B

流程如下:
-用户未登录
-在堆栈上按下一个按钮。在
视图中将出现
中,我检查用户是否已登录,如果已登录,则会发出异步网络请求,完成后,会将网络数据加载到表中。但是,由于用户此时未登录,表视图为空
-用户点击搜索框;因为他没有登录,B被按下(在确认之后)
-他在B中成功登录,然后按下一个按钮,弹出B并再次显示a
-此时,由于他已登录,因此从
视图将出现
我执行异步请求
-完成后,我在表视图上调用
reloadData

我注意到调用了
numberOfRowsInSection:
,它返回了正确的结果,但是之后没有调用
cellforrowatinexpath:
,表仍然为空

我已经检查并在主线程上调用了
reloadData

知道会是什么吗?因为它快把我逼疯了

谢谢,
美国

编辑:下面是
视图中的异步代码位将出现在A中

if ([User isLoggedIn]) {
    [self.asyncRequest fetchDataWithCompletionHandler:^(id response, NSError *error) {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        if (error) {
            [Utils displayError:error];
        } else {
            self.array = response;

            self.isLoaded = YES;
            [self.tableView reloadData];
            [self.tableView setContentOffset:CGPointMake(0.0f, 0.0f) animated:NO];
        }
    }];
}
我已检查异步请求是否成功完成,以及
响应是否包含正确的数据(这是用于支持
UITableView
的数组)


reloadData
之后,我在
tableView:numberofrowsinssection:
中放置了一个断点,它在那里停止,并返回
数组中正确的元素数。但是,在此之后,
tableView:cellForRowAtIndexPath:
中的断点将永远不会命中。

您确定在用户登录并弹出B之后,
视图将在调用A的方法中出现
以执行刷新吗

如果将B显示为模态控制器,则当您取消它时,将不会调用
视图

据我所知,
viewwillbeen/viewdidabeen
(以及其他类似内容)是由UINavigationController在导航事件(push/pop viewcontrollers)情况下生成的事件。
所以,也许这就是为什么当你离开A回来时,你最终会得到更新。。。这完全取决于显示下一个viewcontroller的方式。

当表的大小或位置不需要显示任何行时,将调用
numberOfRowsInSection
但不会调用
cellForRowAtIndexPath
的一个有效场景

例如,假设您有一个20像素高的表,但是第一个部分的标题是30像素高,并且您为标题返回了nil(或者没有实现
viewForHeaderInSection
)。在这种情况下,将不显示任何行,并且看起来该表不存在


我看到您使用的是IB。IB中的表大小可能具有欺骗性,因为它假定页眉和页脚的大小。我将记录表的框架,以便您了解应用程序运行时它在哪里(而不是它在IB中出现的位置)。在调用reloadData之前,我还必须手动调整表的框架大小和位置。这将解决未调用
cellForRowAtIndexPath
的有效情况。

检查
numberOfSectionsInTableView
是否未返回0

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

我遇到了完全相同的问题,问题是我试图从另一个线程调用reloadData。解决办法是:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});

尝试手动插入新行,而不是
[self.tableView reloadData]

[self.tableView beginUpdates];
    for (int i = 0; i < responseArray.count; i++) {
        _rowsNumber += 1;
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
        [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];
    }
[self.tableView endUpdates];

我用的是反作用可可粉。因此,我为表视图创建了模型。数据准备显示,因此调用了
numberOfRows
等。但我没有将tableview添加为子视图,因此,
cellforrowatinexpath
没有被调用))

我解决了这个问题,因为我添加了
UITableView
的子视图没有被分配,所以它返回nill,而tableview没有调用
cellforrowatinexpath
,但是如果视图中有一个表视图,就会调用
numberofrowsinssection

这与Scrool视图类似,它没有调用。您应该在故事板或*.xib文件中分隔视图

// True
    ▼ View
        ► Table View
        ► Scrool View
        ► Constraints

// False
    ▼ View
        ► Scrool View
            ► Table View
        ► Constraints

我通过检查tableViewCell标识符解决了同样的问题。转到属性检查器并查看标识符部分。可能是不见了。因此,请编写单元标识符。

如果您使用的是不同的数据源,就像我一样,请确保保留该数据源。仅仅实例化将成为数据源的类并通过
tableView.dataSource=myDataClass
分配它是不够的,因为tableView的dataSource属性很弱,并且将在viewDidLoad完成时释放。所有其他方法都是为我调用的,甚至令人惊讶的是,
heightforrowatinexpath
,所以我花了一些时间进行调试。

我正在使用一个客户数据源,它已经发布了。因为它是tableview的一个弱引用。

每个人都在谈论高度,但我的
tableview
StackView
中的前导对齐以0宽度结束


确保使用
调试视图层次结构检查您的
表视图的大小是否正确,但这是一个错误:

我在一个ViewController(设计要求)中包含了一个带有2个表视图的Scrollview,在Scrollview控制器中,我通过编程创建了ViewController(包含表视图),并使用了弱var来存储它,坏主意,因为它们是在ViewDiLoad方法结束时发布的

// For others showing up on this questions via Google, etc. // Check and make sure you've set the table view's data source and delegate. self.tableView.dataSource = self; self.tableView.delegate = self;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Make sure self.data isn't nil!
    // If it is, you'll always return 0 and therefore
    // cellForRowAtIndexPath will never get called.
    return [self.data count]; 
}
// True
    ▼ View
        ► Table View
        ► Scrool View
        ► Constraints

// False
    ▼ View
        ► Scrool View
            ► Table View
        ► Constraints
tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
myTableView.translatesAutoresizingMaskIntoConstraints = false
_scanResultTable.delegate = self;
_scanResultTable.dataSource = self; // self's lifecycle was fine, wasn't getting released
[_scanResultTable reloadData];