Xcode iPhone:属性......需要方法...定义 - 使用@syntehsize,@ dynamic或提供方法实现

Art*_*tur 7 iphone xcode ios

在.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.


psa*_*ers 7

在您的类标题(关联的.h文件)中,您显然有类似以下内容:

@property SomeClass *myHeader;
@property SomeClass *customCell;
Run Code Online (Sandbox Code Playgroud)

这告诉编译器您希望您的类具有这些属性,但您仍然必须告诉它如何获取和设置实例上的值.你有三个选择:

  1. 在@implementation部分(在.m文件中),您可以添加

    @synthesize myHeader, customCell;
    
    Run Code Online (Sandbox Code Playgroud)

    告诉编译器自动生成获取和设置这些属性的方法.这是最简单的,通常是你想要的.

  2. 您可以自己实现这些方法:

    - (SomeClass *)myHeader
    {
        // Return the value of myHeader
    }
    
    - (void)setMyHeader:(SomeClass *)inMyHeader
    {
        // Set myHeader to inMyHeader
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这通常用于派生或动态生成的属性,或者当您想要在更改时执行额外工作时.

  3. 您可以使用@dynamic myHeader, customCell;告诉编译器将在运行时提供实现.这很少使用.