3

我有一个带有以下标题的类:

#import <Foundation/Foundation.h>

@interface CustomClass : NSObject

@property (strong, nonatomic) NSString *foo;

@end

使用以下不显示任何错误的实现:

#import "CustomClass.h"

@implementation CustomClass

- (void) setFoo:(NSString *)foo {
    _foo = foo;
}

@end

作为一个 Objective-C 的初学者,当我在实现中添加以下方法时,我感到很困惑:

- (NSString *)foo {
    return _foo;
}

因为现在方法有错误,use of undeclared identifier 'title'建议我_foo改成foo. 不仅在新添加的方法中这么说,在之前的setter方法中也这么说。我已尝试查明情况,但没有找到满意的答复。相关问题谈论@synthesize,但我读过没有必要,所以我不确定问题是什么。

提前致谢!
-GoldDove

4

3 回答 3

6

如果您为该属性同时实现setter 和 getter 方法,则不会自动合成该属性,因此您必须显式合成它:

@synthesize foo = _foo;

(或显式添加实例变量_foo。)

如果您为只读属性实现 getter 方法,这同样适用。

(如果你为一个属性实现了所有必要的访问器方法,那么编译器不再假定这个属性必须由实例变量支持。)

于 2013-08-09T21:29:18.273 回答
2

这是因为 obj c 为您创建了 ivar 以及 setter 和 getter,而您过去必须自己合成 ivar。但是,如果您手动创建 setter 和 getter,则假定您不需要 ivar,因此您必须自己合成它。

于 2013-08-09T21:40:34.173 回答
0

你的班级似乎有两个不同的名字。CustomClass 和 BlogPost。我建议你把它们都做成一个或另一个。

于 2013-08-09T21:27:41.683 回答