【发布时间】:2012-03-15 12:57:18
【问题描述】:
在我的程序中,我试图设置存储在 NSMutableArray 中的对象的属性“框架”。当我尝试设置对象的框架时,我的程序接收到带有消息“__[NSCFNumber setFrame:]: unrecognized selector sent to instance 0x6a8d960”的信号“SIGABRT”。我该如何解决这个问题?
for (int i = 0; i
CardView* card = [computerHand objectAtIndex:i]; card.frame = CGRectMake(10+70*i, 340, 60, 85);}
computerHand 的声明:
@property(retain) NSMutableArray* computerHand;
计算机手的人口
-(void) addCardToHand:(NSMutableArray *)hand
{
[hand addObject:[cards objectAtIndex:0]];
NSLog(@"%@", [[cards objectAtIndex:0]class]);
[cards removeObjectAtIndex:0];
}
注意- NSLog 将“__NSCFNumber”打印到控制台。
甲板人口代码
-(void) createDeck : (UIView *)view
{
cards = [[NSMutableArray alloc]initWithCapacity:52];
for (int i = 0; i <= 4; i++)
{
for(int j = 0; j <= 13; j++)
{
CardView* card = [[CardView alloc] initWithFrame:CGRectMake(view.center.x - 60/2, view.center.y - 85/2, 60, 85) value:j];
[cards addObject:card];
[view addSubview:card];
}
}
for(int i =0; i<= 52; i++)
{
NSLog(@"%@", [cards objectAtIndex:i]);
}
}
注意:NSLog 命令正确地将 CardView 对象打印到控制台,但在尝试从不同范围访问它时会打印 __NSCFNumber。 任何帮助表示赞赏。
【问题讨论】:
-
您正在尝试将 frame 属性设置为 NSNumber 实例,检查您的数组中是否存在所有有效对象,更多代码将很容易解决您的问题。
-
@chiLLer,我该怎么做?
-
显示创建
computerHand对象的代码;我敢打赌它发布得太早了。不是这样的,能不能把你创建卡片的代码显示出来,加到computerHand -
这里的问题是数组
computerHand中索引i处的对象不是CardView对象。像这样的数组访问没有编译时检查。数组中的值是一个 NSNumber,因此没有frame属性。您可能应该查看将对象插入computerHand数组的代码(此处未包括在内)。我怀疑您会发现您实际上并没有将CardView类型的对象放入数组中。 (因为 NSNumber 不知何故进入了那里。) -
@ipmcc 你是对的,数组中的对象是 NSNumber 类型而不是 CardView。我将不得不追查我在哪里犯了这个错误。感谢您的帮助:)
标签: objective-c properties nsmutablearray frame sigabrt