在.m文件中,我有4个与一个命令相关的警告:
@结束
属性'myHeader'需要定义方法'-myHeader' - 使用@synthesize,@ dynamic或提供方法实现
属性'customCell'需要定义'setCustomCell:'方法 - 使用@synthesize,@ dynamic或提供方法实现
属性'customCell'需要定义方法'-customCell' - 使用@synthesize,@ dynamic或提供方法实现
属性'myHeader'需要定义方法'setMyHeader' - 使用@synthesize,@ dynamic或提供方法实现
我通过论坛浏览,但到目前为止我无望 - 你能解释一下(初学者程序员......)如何调试它?太感谢了!
luc*_*anf 14
复苏旧线程.可能不是OP问题,但我认为值得一提的是,以防其他人(像我一样)碰到这个.如果您在类类别中实现新属性,则会收到相同的消息(如果您使用的LLVM 4不再需要@synthesize,则会感到困惑).使用此处概述的技术可以实现:
@interface SomeClass (Private)
@property (nonatomic, assign) id newProperty;
@end
NSString * const kNewPropertyKey = @"kNewPropertyKey";
@implementation SomeClass (Private)
@dynamic newProperty;
- (void)setNewProperty:(id)aObject
{
objc_setAssociatedObject(self, kNewPropertyKey, aObject, OBJC_ASSOCIATION_ASSIGN);
}
- (id)newProperty
{
return objc_getAssociatedObject(self, kNewPropertyKey);
}
@end
Run Code Online (Sandbox Code Playgroud)
sup*_*ssi 10
这意味着您需要合成这些变量.合成为您创建setter和getter方法.为此,您需要在实现(.m)文件中包含以下代码:
@synthesize myHeader;
@synthesize customCell;
Run Code Online (Sandbox Code Playgroud)
添加这些行应该处理您的4个错误.
您也可以选择自己定义setter和getter方法,但除非您想要执行某些特定操作,否则请立即使用@synthesize.
在您的类标题(关联的.h文件)中,您显然有类似以下内容:
@property SomeClass *myHeader;
@property SomeClass *customCell;
Run Code Online (Sandbox Code Playgroud)
这告诉编译器您希望您的类具有这些属性,但您仍然必须告诉它如何获取和设置实例上的值.你有三个选择:
在@implementation部分(在.m文件中),您可以添加
@synthesize myHeader, customCell;
Run Code Online (Sandbox Code Playgroud)
告诉编译器自动生成获取和设置这些属性的方法.这是最简单的,通常是你想要的.
您可以自己实现这些方法:
- (SomeClass *)myHeader
{
// Return the value of myHeader
}
- (void)setMyHeader:(SomeClass *)inMyHeader
{
// Set myHeader to inMyHeader
}
Run Code Online (Sandbox Code Playgroud)
这通常用于派生或动态生成的属性,或者当您想要在更改时执行额外工作时.
您可以使用@dynamic myHeader, customCell;告诉编译器将在运行时提供实现.这很少使用.
| 归档时间: |
|
| 查看次数: |
13471 次 |
| 最近记录: |