0

クラスとしてゲームモデルを作成しました。クラス拡張の作成に関するこの質問を確認しました: Objective-C でクラスのプライベート メソッドを定義する最良の方法

私が持っているのは、いくつかの公開メソッドです。これらは、他の VC がアプリで使用できるように公開されています。また、クラスのパブリック メソッドが利用できるいくつかのプライベート メソッドも必要ですが、アプリケーションの残りの部分に対してオープンである必要はありません。

これは、実装ファイルに追加のインターフェイス セクションを追加するクラス拡張によって実現できると考えましたが、これは機能していないようです。

インプファイル:

#import "MESGameModel.h"

@interface MESGameModel ()

-(BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser;

@end

@implementation MESGameModel

#pragma mark - Public methods
+(void)createNewGameAgainst:(PFUser *)user2 withCompletion:(void (^)(BOOL success))completionHandler{

後で、他のプライベート メソッドの宣言があります。

#pragma mark - Private methods
-(BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser {

私が探しているのは、パブリック メソッド (createNewGameAgainst) 内で [self checkIfGameAlreadyExistsAgainst...] などを呼び出す機能です。

4

2 に答える 2

1

createNewGameAgainstメソッドはクラス メソッドです (+メソッド宣言の前の を参照してください) 。checkIfGameAlreadyExistsAgainstメソッドはインスタンス メソッドです (-メソッド宣言の前の を参照してください) 。checkIfGameAlreadyExistsAgainstから呼び出すcreateNewGameAgainstには、 のインスタンスを取得する必要がありますMESGameModelself内部ではcreateNewGameAgainst、クラスのインスタンスではなく、クラス自体を参照します。

于 2013-07-04T22:14:45.297 に答える
1

フォームを使用できます。あなたの問題は、クラスメソッドとインスタンスメソッドの違いを理解することです.

+ (void)createNewGameAgainst:(PFUser *)user2 withCompletion:(void (^)(BOOL success))completionHandler

MESGameModelクラス メソッドです (「+」に注意してください) 。このメソッドを呼び出すためにのインスタンスは必要ありません。MESGameModelただし、そのクラス メソッドの定義 (または本体) 内にのインスタンスはありません。MESGameModelのインスタンスがMESGameModelクラス メソッドに存在しないため、 のインスタンス メソッド、プロパティ、または ivar を使用できません。

selfこのスコープでは、メッセージを送信できますが、クラス メソッドに応答する特別なクラスになります。

- (BOOL)checkIfGameAlreadyExistsAgainst:(PFUser *)opponentUser;

インスタンス メソッドを宣言します (「-」に注意してください)。のインスタンスがMESGameModelこのメッセージに応答する場合があり、そのメソッドの定義内で、 のインスタンス変数、プロパティ、インスタンス メソッド、およびクラス メソッドにアクセスできますMESGameModel

selfメッセージを送信できるインスタンスにMESGameModelなり、インスタンス メソッドに応答します。

于 2013-07-04T22:18:38.233 に答える