アプリ全体で再利用するため、UIToolbar をサブクラス化しています。UIToolbar はデリゲート プロトコルを使用します。
//
// UIToolbarCustom.h
//
#import <UIKit/UIKit.h>
@protocol UIToolbarCustomDelegate
@required
- (void)tab:(UIBarButtonItem *)sender;
- (void)ok:(UIBarButtonItem *)sender;
@end
@interface UIToolbarCustom : UIToolbar {
id <UIToolbarCustomDelegate> delegate;
}
@property (strong, nonatomic) id delegate;
@end
スタンドフォード iOS 開発コースの教師は、次のように、アンダースコアを前に付けてすべての ivar を明示的に宣言することを推奨しています。
@implementation UIToolbarCustom
@synthesize delegate = _delegate;
@end
しかし、この特定のシナリオでは、エラーが発生します。
error: property 'delegate' attempting to use ivar '_delegate'...
以下を使用すると、コードは問題なく動作します。
@synthesize delegate = __delegate; or
@synthesize delegate;
ここで何が起こっているのですか?_delegate という名前の UIToolbar クラスにプライベート インスタンス変数はありますか?
アップデート
すべての説明とヒントをありがとう、私は多くを学んでいます。私はiOS開発が初めてであることがわかりました(これは私の最初のアプリの2番目のバージョンなので、正しくやろうとしています= p)。ヒントに従って、この新しいヘッダー ファイルを作成しました。
//
// Toolbar.h
//
#import <UIKit/UIKit.h>
@protocol ToolbarDelegate
@required
- (void)tab:(UIBarButtonItem *)sender;
- (void)ok:(UIBarButtonItem *)sender;
@end
@interface Toolbar : UIToolbar
@property (strong, nonatomic) id delegate;
@end
ノート:
クラス接頭辞が削除されました。
デリゲート宣言が削除されました (私は iOS デリゲート チュートリアル コードを使用していますが、コード サンプルでは宣言が必要な古い xcode バージョンを使用しています)。
合成が削除されました。また、プロパティを合成する必要がなくなったことも知りませんでした。
PS: ivar の問題のため、明らかにコードは機能しません。名前を変更するつもりなので、合成する必要はありません。とにかく、どの名前を使用するかはわかりません...