模型

时间:2017-12-19 06:17:00

标签: objective-c

在objective-c中自定义iOS应用。不太熟悉这种语言,设置布尔属性的这个简单任务花了我太长时间。

有人可以在这里提供一些建议吗?

Video.h

@property (nonatomic, retain) NSNumber * hasCustomThumbnail;

Video.m

@implementation Video
     @dynamic hasCustomThumbnail;
@end

OtherFile 引用视频

// have tried these two an many other things...
video.hasCustomThumbnail = [NSNumber numberWithBool:NO];
video.hasCustomThumbnail = @NO;

无论我尝试了多少种方式,我得到的错误是:

'NSInvalidArgumentException', reason: '-[Video setHasCustomThumbnail:]: unrecognized selector sent to instance 0x60c0004925c0'

尝试了很多建议,包括:Using a BOOL property

我也知道视频被正确引用,因为自动填充建议" hasCustomThumbnail"当我开始打字时。

我简直无法相信OBJ-c有多难: - )

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

问题是您已将其声明为 @dynamic 。只需从Video.m中删除此行即可。 Xcode将自动合成getter和setter。

其中任何一个都有效。

[obj setHasCustomThumbnail:[NSNumber numberWithBool:true]];
obj.hasCustomThumbnail = [NSNumber numberWithBool:true];
   @dynamic只是告诉编译器getter和setter方法   不是由类本身实现,而是在其他地方实现(如   超类或将在运行时提供)。

     

@synthesize将为您的属性生成getter和setter方法。

因此,当您使用 @dynamic 定义属性时,您的超类或运行时应该提供必要的getter和setter。这里没有人提供任何东西,这就是它说无法识别的选择器发送给实例的原因。只有当它无法找到对象的正确方法时才会出现此错误。希望这能清除你的疑虑。

  

@dynamic的一个实际用途是当你从中继承你的类时   NSManagedObject,核心数据将提供setter和getter   属性。

答案 1 :(得分:0)

此问题与BOOL或NSNumber无关。这是由于您在类Video上调用setIsCustomThumbnail。

您正在执行video.isCustomThumbnail =[video setIsCustomThumbnail:],但您的班级未声明此isCustomThumbnail。从你的代码中看起来你错误isCustomThumbnail,因为 CustomThumbnail。

所以请下定决心并使用单一名称。