カスタムinitメソッドを使用してインスタンス化されたオブジェクトのプロパティにアクセスする

ナホムファビアン

カスタムinitメソッドを使用したクラスは次のとおりです。

// Piece.h

#import <Foundation/Foundation.h>

@interface Piece : CCSprite

@property (nonatomic) int pieceNumber;

+(Piece *)initWithPieceImage:(UIImage*)piece pieceName:(int)pName;

@end

// Piece.m

#import "Piece.h"

@implementation Piece

@synthesize pieceNumber = _pieceNumber;

+(id)initWithPieceImage:(UIImage *)piece pieceName:(int)pName
{
  return [[[self alloc] initWithPieceImage:piece pieceName:pName] autorelease];
}

-(Piece*)initWithPieceImage:(UIImage *)piece pieceName:(int)pName
{
  CCSprite *bgImage = nil;
  if ( (self=[super init]) )
  {
    bgImage = [CCSprite spriteWithCGImage:piece.CGImage 
                                      key: [NSString stringWithFormat:@"%i",pName]];
  }
  return (Piece*)bgImage;
}
@end

このようにPieceクラスをインスタンス化して、レイヤーに追加しました。

Piece *newPiece = [Piece initWithPieceImage:myUIImage pieceName:1];
[newPiece setPieceNumber:2];   //Error in this line
[self addChild: newPiece z:1];    

しかし、私はこのようにそれを試しました、そしてそれは完全に機能します:

Piece *newPiece = [[Piece alloc] init];
[newPiece setPieceNumber:2];

しかし、これは私が望むものではありません。

そして、これが私が得るエラーです:

[CCSprite setPieceNumber:]:認識されないセレクターがインスタンス0x85f1050に送信されましたキャッチされない例外NSInvalidArgumentExceptionが原因でアプリを終了しています、理由:-[CCSprite setPieceNumber:]:認識されないセレクターがインスタンス0x85f1050に送信されました

どうやら問題は、Imがオブジェクトを初期化しようとしている方法にあるようです。

私はobjective-cの初心者なので、ここで何が悪いのか理解できません。

私がここで何を間違っているのかについて何か考えはありますか?
このアプローチを実現し、カスタムinitメソッドを使用してインスタンス化されたオブジェクトのプロパティにアクセスするにはどうすればよいですか?

レオナタン

コードが混乱しています。-(Piece*)initWithPieceImage:(UIImage *)piece pieceName:(int)pNameあなたを返すCCSprite代わりに、オブジェクトをPieceselfオブジェクトを割り当てますが、タイプが正しくない別のオブジェクトを返します。

init 正しいタイプを返すので(再実装していないため)、機能しますが、実際にはイメージが正しく初期化されていません。

次のようにメソッドを変更する必要があります。

-(Piece*)initWithPieceImage:(UIImage *)piece pieceName:(int)pName
{
    return [super initWithCGImage:piece.CGImage key:[NSString stringWithFormat:@"%i",pName]];
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Kenticoカスタムオブジェクトマクロメソッドでネストされたプロパティにアクセスする

分類Dev

ノックアウトを使用してバインドされたオブジェクトインスタンスのプロパティにアクセスするにはどうすればよいですか

分類Dev

カスタムオブジェクトタイプのリストを受け入れ、同様のプロパティにアクセスするジェネリックメソッドを作成します

分類Dev

ES6クラスインスタンスのプロパティとメソッドを使用してオブジェクトを拡張する方法

分類Dev

カスタムメソッドを使用してフィールドをネストされたオブジェクトにマッピングする

分類Dev

配列を使用するメソッドのインスタンス化されたオブジェクトをパラメーターに使用する方法

分類Dev

SecurityError:SeleniumPythonを使用してiframeのダウンロードリンクをクリックするとクロスオリジンオブジェクトエラーでプロパティ「ドキュメント」にアクセスするためのアクセス許可が拒否されました

分類Dev

具象子クラスのオーバーライドされたメソッドから、抽象クラスのコンストラクターを介してインスタンス化されたオブジェクトの属性にアクセスするにはどうすればよいですか?

分類Dev

AndroidのonCreate()で使用するカスタムクラスオブジェクトを使用してlateinitを適切に実装し、「プロパティゲッターまたはセッターが期待される」エラーを回避する方法

分類Dev

サードパーティによってインスタンス化されたオブジェクトの中に注入するCDIを使用する方法

分類Dev

外部クラスのインスタンスを使用してネストされたクラスのプロパティにアクセスする方法

分類Dev

Javaは、クラス/静的メソッドの代わりにインスタンスメソッドを使用して、インスタンス化されたオブジェクトごとに一意のIDを作成します

分類Dev

プロパティ割り当てでオブジェクトをインスタンス化すると、QtCreatorに「ビルドの問題」が表示されます

分類Dev

カスタムテーブルタイプを使用せずに、ネイティブにコンパイルされたストアドプロシージャでメモリに最適化されていないテーブルを使用する

分類Dev

PHP / OOP同じクラスのインスタンスが他のオブジェクトからプライベートプロパティ/メソッドにアクセスするのを回避する方法

分類Dev

Vueインスタンスの計算されたプロパティオブジェクトにアクセスする

分類Dev

MainActivityのListViewオブジェクトを使用してカスタムアクティビティクラスをインスタンス化します

分類Dev

インスタンスのリストのプロパティにアクセスするための静的メソッドを作成します

分類Dev

Actionscript 3.0エラー1120:インスタンス化されたオブジェクトでも未定義のプロパティにアクセス

分類Dev

ソリューションによってプリセットされたプロジェクトファイルのカスタム プロパティ

分類Dev

オブジェクトのプロパティを変更し、反応性を維持しようとしています。プロパティまたはメソッド「vm」はインスタンスで定義されていませんが、レンダリング中に参照されます

分類Dev

IE11でマシン名でサイトにアクセスすると、「オブジェクトはプロパティまたはメソッド 'querySelector'をサポートしていません」と表示されます

分類Dev

コンポーネントを使用して@inputターゲットオブジェクトのプロパティにアクセスする

分類Dev

Aurelia:バインドされたオブジェクトの特定のプロパティを監視する方法(カスタム属性)

分類Dev

計算されたプロパティを介してアクセスされるオブジェクト要素のタイプを推測する方法は?

分類Dev

テスト対象のメソッド内でインスタンス化されたオブジェクトをモックする方法

分類Dev

オブジェクト型をパラメーターとして受け取るコンストラクターを使用した静的メソッドでの非静的クラス(コンテキスト)のインスタンス化

分類Dev

アプリケーションで使用されるそのタイプのリストが複数ある場合に、モデルにカスタムオブジェクトシーケンスプロパティを保持する方法

分類Dev

SpringBootの@NonNullアノテーション付きhttpリクエストオブジェクトフィールドに、nullポインターをスローせずに、セッターメソッドでアクセスして操作できますか?

Related 関連記事

  1. 1

    Kenticoカスタムオブジェクトマクロメソッドでネストされたプロパティにアクセスする

  2. 2

    ノックアウトを使用してバインドされたオブジェクトインスタンスのプロパティにアクセスするにはどうすればよいですか

  3. 3

    カスタムオブジェクトタイプのリストを受け入れ、同様のプロパティにアクセスするジェネリックメソッドを作成します

  4. 4

    ES6クラスインスタンスのプロパティとメソッドを使用してオブジェクトを拡張する方法

  5. 5

    カスタムメソッドを使用してフィールドをネストされたオブジェクトにマッピングする

  6. 6

    配列を使用するメソッドのインスタンス化されたオブジェクトをパラメーターに使用する方法

  7. 7

    SecurityError:SeleniumPythonを使用してiframeのダウンロードリンクをクリックするとクロスオリジンオブジェクトエラーでプロパティ「ドキュメント」にアクセスするためのアクセス許可が拒否されました

  8. 8

    具象子クラスのオーバーライドされたメソッドから、抽象クラスのコンストラクターを介してインスタンス化されたオブジェクトの属性にアクセスするにはどうすればよいですか?

  9. 9

    AndroidのonCreate()で使用するカスタムクラスオブジェクトを使用してlateinitを適切に実装し、「プロパティゲッターまたはセッターが期待される」エラーを回避する方法

  10. 10

    サードパーティによってインスタンス化されたオブジェクトの中に注入するCDIを使用する方法

  11. 11

    外部クラスのインスタンスを使用してネストされたクラスのプロパティにアクセスする方法

  12. 12

    Javaは、クラス/静的メソッドの代わりにインスタンスメソッドを使用して、インスタンス化されたオブジェクトごとに一意のIDを作成します

  13. 13

    プロパティ割り当てでオブジェクトをインスタンス化すると、QtCreatorに「ビルドの問題」が表示されます

  14. 14

    カスタムテーブルタイプを使用せずに、ネイティブにコンパイルされたストアドプロシージャでメモリに最適化されていないテーブルを使用する

  15. 15

    PHP / OOP同じクラスのインスタンスが他のオブジェクトからプライベートプロパティ/メソッドにアクセスするのを回避する方法

  16. 16

    Vueインスタンスの計算されたプロパティオブジェクトにアクセスする

  17. 17

    MainActivityのListViewオブジェクトを使用してカスタムアクティビティクラスをインスタンス化します

  18. 18

    インスタンスのリストのプロパティにアクセスするための静的メソッドを作成します

  19. 19

    Actionscript 3.0エラー1120:インスタンス化されたオブジェクトでも未定義のプロパティにアクセス

  20. 20

    ソリューションによってプリセットされたプロジェクトファイルのカスタム プロパティ

  21. 21

    オブジェクトのプロパティを変更し、反応性を維持しようとしています。プロパティまたはメソッド「vm」はインスタンスで定義されていませんが、レンダリング中に参照されます

  22. 22

    IE11でマシン名でサイトにアクセスすると、「オブジェクトはプロパティまたはメソッド 'querySelector'をサポートしていません」と表示されます

  23. 23

    コンポーネントを使用して@inputターゲットオブジェクトのプロパティにアクセスする

  24. 24

    Aurelia:バインドされたオブジェクトの特定のプロパティを監視する方法(カスタム属性)

  25. 25

    計算されたプロパティを介してアクセスされるオブジェクト要素のタイプを推測する方法は?

  26. 26

    テスト対象のメソッド内でインスタンス化されたオブジェクトをモックする方法

  27. 27

    オブジェクト型をパラメーターとして受け取るコンストラクターを使用した静的メソッドでの非静的クラス(コンテキスト)のインスタンス化

  28. 28

    アプリケーションで使用されるそのタイプのリストが複数ある場合に、モデルにカスタムオブジェクトシーケンスプロパティを保持する方法

  29. 29

    SpringBootの@NonNullアノテーション付きhttpリクエストオブジェクトフィールドに、nullポインターをスローせずに、セッターメソッドでアクセスして操作できますか?

ホットタグ

アーカイブ