在框架提供的视图控制器上重写 didSelectRowAtIndexPath?
Overriding didSelectRowAtIndexPath on a framework-provided view controller?
所以我使用 CoreAudioKit 的 CABTMIDICentralViewController 为用户提供 MIDI 蓝牙设备列表 select。但是,我希望能够告诉用户 select 完成后使用的是哪个设备,但 Apple 似乎没有添加任何方法来做到这一点。
所以我试图通过检测用户 select 在 table:
中的一行来破解它
DPBleMidiDeviceManager.h:
#import <CoreAudioKit/CoreAudioKit.h>
@interface DPBleMidiDeviceManager : CABTMIDICentralViewController
@end
DPBleMidiDeviceManager.m:
#import "DPBleMidiDeviceManager.h"
@implementation DPBleMidiDeviceManager
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"midi device selected %@", indexPath);
//either of these next lines crash, it makes no difference:
//[[tableView delegate] tableView:tableView didDeselectRowAtIndexPath:indexPath];
[super tableView:tableView didDeselectRowAtIndexPath:indexPath];
}
@end
问题是,它在最后一行崩溃,说没有 selector。这很奇怪,因为如果我删除 super 调用,它不会崩溃,但它也不会正确连接到 BLE 设备,就像我没有覆盖该委托调用时一样。
这只是 Apple 所做的让您无法访问他们的 table 的事情吗?为什么他们会构建一个这样的 UI 视图并让您调用它,但不向您提供有关结果的任何信息?我是否缺少执行此操作的一些标准方法?
编辑:以下是 super
调用崩溃的详细信息:
2015-10-29 15:14:37.039 [626:338267] midi device selected <NSIndexPath: 0x1473ae20> {length = 2, path = 0 - 3}
2015-10-29 15:14:37.039 [626:338267] -[DPBleMidiDeviceManager tableView:didDeselectRowAtIndexPath:]: unrecognized selector sent to instance 0x147f34e0
2015-10-29 15:14:37.040 [626:338267] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DPBleMidiDeviceManager tableView:didDeselectRowAtIndexPath:]: unrecognized selector sent to instance 0x147f34e0'
*** First throw call stack:
(0x2b3cdfef 0x3967dc8b 0x2b3d3409 0x2b3d11bf 0x2b300e78 0xaa165 0x2eb3956b 0x2ebe843b 0x2ea9da91 0x2ea1838f 0x2b393fed 0x2b3916ab 0x2b391ab3 0x2b2de201 0x2b2de013 0x32aab201 0x2ea82a59 0x88447 0x39c09aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
这不是你所说的超级。应该是
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"midi device selected %@", indexPath);
[super tableView:tableView didDeselectRowAtIndexPath:indexPath];
}
所以我使用 CoreAudioKit 的 CABTMIDICentralViewController 为用户提供 MIDI 蓝牙设备列表 select。但是,我希望能够告诉用户 select 完成后使用的是哪个设备,但 Apple 似乎没有添加任何方法来做到这一点。
所以我试图通过检测用户 select 在 table:
中的一行来破解它DPBleMidiDeviceManager.h:
#import <CoreAudioKit/CoreAudioKit.h>
@interface DPBleMidiDeviceManager : CABTMIDICentralViewController
@end
DPBleMidiDeviceManager.m:
#import "DPBleMidiDeviceManager.h"
@implementation DPBleMidiDeviceManager
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"midi device selected %@", indexPath);
//either of these next lines crash, it makes no difference:
//[[tableView delegate] tableView:tableView didDeselectRowAtIndexPath:indexPath];
[super tableView:tableView didDeselectRowAtIndexPath:indexPath];
}
@end
问题是,它在最后一行崩溃,说没有 selector。这很奇怪,因为如果我删除 super 调用,它不会崩溃,但它也不会正确连接到 BLE 设备,就像我没有覆盖该委托调用时一样。
这只是 Apple 所做的让您无法访问他们的 table 的事情吗?为什么他们会构建一个这样的 UI 视图并让您调用它,但不向您提供有关结果的任何信息?我是否缺少执行此操作的一些标准方法?
编辑:以下是 super
调用崩溃的详细信息:
2015-10-29 15:14:37.039 [626:338267] midi device selected <NSIndexPath: 0x1473ae20> {length = 2, path = 0 - 3}
2015-10-29 15:14:37.039 [626:338267] -[DPBleMidiDeviceManager tableView:didDeselectRowAtIndexPath:]: unrecognized selector sent to instance 0x147f34e0
2015-10-29 15:14:37.040 [626:338267] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DPBleMidiDeviceManager tableView:didDeselectRowAtIndexPath:]: unrecognized selector sent to instance 0x147f34e0'
*** First throw call stack:
(0x2b3cdfef 0x3967dc8b 0x2b3d3409 0x2b3d11bf 0x2b300e78 0xaa165 0x2eb3956b 0x2ebe843b 0x2ea9da91 0x2ea1838f 0x2b393fed 0x2b3916ab 0x2b391ab3 0x2b2de201 0x2b2de013 0x32aab201 0x2ea82a59 0x88447 0x39c09aaf)
libc++abi.dylib: terminating with uncaught exception of type NSException
这不是你所说的超级。应该是
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"midi device selected %@", indexPath);
[super tableView:tableView didDeselectRowAtIndexPath:indexPath];
}