0

コードをModernObjective-Cスタイルに変換しようとしています。ここでの読み方http://www.techotopia.com/index.php/The_Basics_of_Modern_Objective-C ":"ただし、Modern Objective-Cの場合、合成はデフォルトで行われるため、@synthesize宣言を使用する必要はありません。 。デフォルトのプロパティ合成を使用する場合、インスタンス変数のプロパティには、コード内からアンダースコアを前に付けたプロパティ名を使用してアクセスできます。」

しかし、私は持っています:

Relationship.h

@interface Relationship : NSObject <NSCoding>
//...
@property(nonatomic, weak) Person* first;
//...
@end`

OtherRelationship.h

#import "Relationship.h"

@interface OtherRelationship : Relationship

@end

OtherRelationship.m

#import "OtherRelationship.h"

@implementation OtherRelationship

@synthesize first = _first;

- (void)foo
{
NSLog(@"%@", _first);
}

そしてそれは働いています。しかし、私が削除すると

 @synthesize first = _first;

「宣言されていない識別子'_first'の使用」エラーが発生します。継承された変数は自動合成で機能しませんか、それとも他の場所で問題を探す必要がありますか?

4

1 に答える 1

3

スーパークラスのバッキングivarは、サブクラスに対して@privateです。つまり、サブクラスはself.firstを呼び出すことができますが、_firstを呼び出すことはできません。もう一度@synthesizeする場合は、_firstを参照できないため、別の名前を使用してください。たとえば@synthesize first = _ffirst;、@ synthesizeに置き換えるか、単にドロップします。

于 2013-03-22T16:37:43.627 に答える