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'ことをお勧めします。新しく追加されたメソッドで言うだけでなく、以前のセッター メソッドでもそれを言います。状況を調べてみましたが、満足のいく回答が見つかりませんでした。関連する質問は について話していますが、必要ではないことを読んだので、何が問題なのかわかりません。_foofoo@synthesize

前もって感謝します!
-ゴールドダブ

4

3 に答える 3

6

プロパティのsetter メソッドと getter メソッドの両方を実装する場合、そのプロパティは自動的に合成されないため、明示的に合成する必要があります。

@synthesize foo = _foo;

_foo(またはインスタンス変数を明示的に追加します。)

読み取り専用プロパティに getter メソッドを実装する場合も同様です。

(プロパティに必要なすべてのアクセサ メソッドを実装すると、コンパイラは、このプロパティがインスタンス変数によってバックアップされている必要があると想定しなくなります。)

于 2013-08-09T21:29:18.273 に答える
2

これは、以前は自分で ivar を合成する必要があったのに対し、obj c がセッターとゲッターと共に ivar を作成するためです。ただし、セッターとゲッターを手動で作成すると、ivar が不要であると見なされるため、自分で合成する必要があります。

于 2013-08-09T21:40:34.173 に答える
0

あなたのクラスには 2 つの異なる名前があるようです。CustomClass と BlogPost。どちらか一方にすることをお勧めします。

于 2013-08-09T21:27:41.683 に答える