gpt4 book ai didi

iphone - Objective-C 错误 : [UIView copyWithZone:]: unrecognized selector sent to instance

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:34 25 4
gpt4 key购买 nike

我在使用 block 和继承时遇到了一些极端困难。

我在 .h 文件中声明了一个 block :

void (^block)(BOOL);

在 .m 中初始化它:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
block = ^(BOOL noshow)
{
if(noshow){
AutoTracView.hidden = YES;
MarineTracView.hidden = YES;

}
};
}
return self;
}

现在我将它和 UIVIEw 实例一起传递给 UIViewController 的类别:

NSDictionary *const collection = [NSDictionary dictionaryWithObjectsAndKeys: //make global
@"1", AutoTracView,
@"2", MarineTracView,
nil];

[self renderView:[current_unit.unit_type intValue] onCollection:(NSDictionary *)collection withBlock:block];

在 UIViewController+extensions.m 中:

-(void)renderView:(int)value onCollection:(NSDictionary *)collection withBlock:block
{
block(TRUE);
NSString *index = [NSString stringWithFormat:@"%d", value];
UIView *view = [collection objectForKey:index];
view.hidden = NO;
}

不幸的是,block(TRUE) 抛出编译错误:“被调用的对象类型 id 不是函数或函数指针”

好吧,所以我很绝望,只​​是试着让 block 的东西工作,所以我删除了 block 作为参数调用。并在确实有效的 Controller 中调用它。但是随后出现了另一个问题:

NSDictionary *const collection = [NSDictionary dictionaryWithObjectsAndKeys: //make global
@"1", AutoTracView,
@"2", MarineTracView,
nil];

上面那句话失败了:

-[UIView copyWithZone:]: unrecognized selector sent to instance 0x6ee2b80
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView copyWithZone:]: unrecognized selector sent to instance 0x6ee2b80'

我不允许传递我的 UIView 实例吗?

这是它的头文件:

@property (weak, nonatomic) IBOutlet UIView *AutoTracView;

@property (weak, nonatomic) IBOutlet UIView *MarineTracView;

我现在觉得做任何事情都被困住了。这看起来像是一个由两部分组成的问题,但实际上我放弃了传递 block 的概念,只是寻找关于错误“[UIView copyWithZone:]: unrecognized selector sent to instance”的想法

最佳答案

一个问题是您对 dictionaryWithObjectsAndKeys: 的调用。我想你想让 UIViews 成为对象,数字字符串成为键,但是你编码它的方式,你正在使字符串成为值,而 UIViews 成为键。 UIView 没有实现 NSCopyable,所以它们不能用作键。您应该在调用中颠倒顺序,如下所示:

NSDictionary *const collection = [NSDictionary dictionaryWithObjectsAndKeys: //make global
AutoTracView, @"1",
MarineTracView, @"2",
nil];

真的,如果你只想给它们数字索引,你可以使用 NSArray 而不是 NSDictionary,但没有理由说这两种方法都行不通。

关于iphone - Objective-C 错误 : [UIView copyWithZone:]: unrecognized selector sent to instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745362/

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