我使用块和继承遇到了一些极大的困难。
我在.h文件中声明了一个块:
在 .m 文件中进行初始化:
现在,我将它以及UIVIew实例一起传递给UIViewController的一个类别:
在 UIViewController+extensions.m 文件中:
不幸的是,block(TRUE) 抛出了一个编译错误:"called object type id is not a function or function pointer"。
好吧,我变得绝望了,试图让 block 运作起来,所以我将其作为参数调用移除了。只在控制器中调用它确实有效。但是随之出现了另一个问题:
它以上述话语失败了:
我不能在程序中传递我的UIView实例吗?
这是头文件:
我现在感觉无法做任何事情。这似乎是一个两部分的问题,但我已经放弃了通过块的概念,只是在寻找关于错误“[UIView copyWithZone:]:未识别的选择器发送到实例” 的想法。
我在.h文件中声明了一个块:
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) 抛出了一个编译错误:"called object type id is not a function or function pointer"。
好吧,我变得绝望了,试图让 block 运作起来,所以我将其作为参数调用移除了。只在控制器中调用它确实有效。但是随之出现了另一个问题:
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;
我现在感觉无法做任何事情。这似乎是一个两部分的问题,但我已经放弃了通过块的概念,只是在寻找关于错误“[UIView copyWithZone:]:未识别的选择器发送到实例” 的想法。