カスタム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
代わりに、オブジェクトをPiece
。self
オブジェクトを割り当てますが、タイプが正しくない別のオブジェクトを返します。
init
正しいタイプを返すので(再実装していないため)、機能しますが、実際にはイメージが正しく初期化されていません。
次のようにメソッドを変更する必要があります。
-(Piece*)initWithPieceImage:(UIImage *)piece pieceName:(int)pName
{
return [super initWithCGImage:piece.CGImage key:[NSString stringWithFormat:@"%i",pName]];
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加