gpt4 book ai didi

iPhone:didSelectRowAtIndexPath 未调用

转载 作者:行者123 更新时间:2023-12-03 18:26:13 26 4
gpt4 key购买 nike

我知道之前提到过这个问题,但那里的解决方案并不适用。我有一个使用 IB 设置的带有嵌入式 UITableViewController 的 UINavigationController 。在IB中,UITableView的委托(delegate)和数据源都设置为我的UITableViewController的派生。该类是使用 UITableViewController 类的 XCode 模板添加的。没有自定义 UITableViewCell,表格 View 仅使用带有单个标题的默认纯样式。

嗯,在模拟器中,列表已正确呈现,数据源提供了两个元素,因此数据源已正确链接。如果我删除 IB 中数据源的导出链接,则会呈现一个空表。

当我点击这两项中的一项时,它就会闪烁蓝色,并且 GDB 在 UITableView::_selectRowAtIndexPath 范围内的 __forwarding__ 中遇到中断。它没有达到我的非空方法 didSelectRowIndexPath 中设置的断点。我检查了参数和方法的名称以排除导致不同选择器的拼写错误。

我最近没有成功确定委托(delegate)是否设置正确,但由于它的设置相当于从同一类获取两个元素的数据源,因此我希望它能够正确设置。那么,出了什么问题?

我正在运行 iPhone/iPad SDK 3.1.2 ...但也在模拟器中尝试使用 iPhone SDK 3.1。

编辑:这是我的 UITableViewController 派生的代码:

#import "LocalBrowserListController.h"
#import "InstrumentDescriptor.h"

@implementation LocalBrowserListController

- (void)viewDidLoad {
[super viewDidLoad];
[self listLocalInstruments];
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
[super viewDidUnload];
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [entries count];
}

- (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] autorelease];

if ( ( [entries count] > 0 ) && ( [indexPath length] > 0 ) )
cell.textLabel.text = [[[entries objectAtIndex:[indexPath indexAtPosition:[indexPath length] - 1]] label] retain];

return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ( ( [entries count] > 0 ) && ( [indexPath length] > 0 ) )
{
...
}
}

- (void)dealloc {
[super dealloc];
}

- (void) listLocalInstruments {
NSMutableArray *result = [NSMutableArray arrayWithCapacity:10];

[result addObject:[InstrumentDescriptor descriptorOn:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"idl"] withLabel:@"Default 1"]];
[result addObject:[InstrumentDescriptor descriptorOn:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"xml"] withLabel:@"Default 2"]];

[entries release];
entries = [[NSArray alloc] initWithArray:result];
}

@end

最佳答案

Apple 的文档指出,当调用 selectRowAtIndexPath:indexPath 时,不会调用 didSelectRowAtIndexPath:index 。要调用didSelectRowAtIndexPath,请使用以下命令:

[[tableView委托(delegate)]tableView:tableView didSelectRowAtIndexPath:index];

这基本上调用了委托(delegate)。

关于iPhone:didSelectRowAtIndexPath 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com