gpt4 book ai didi

ios - 使用我的自定义 init 方法访问实例化对象的属性

转载 作者:行者123 更新时间:2023-11-28 22:14:55 25 4
gpt4 key购买 nike

这是我的类和我的自定义初始化方法:

//片.h

#import <Foundation/Foundation.h>

@interface Piece : CCSprite

@property (nonatomic) int pieceNumber;

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

@end

//片.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

显然问题在于我如何尝试初始化我的对象。

我是 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]];
}

关于ios - 使用我的自定义 init 方法访问实例化对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com