Objective c 如何从NSMutableArray访问对象的属性
在我的程序中,我试图设置存储在NSMutableArray中的对象的属性“frame”。当我尝试设置对象的帧时,我的程序接收到信号“SIGABRT”,并显示消息“\uuu[NSCFNumber setFrame:]:发送到实例0x6a8d960的无法识别的选择器”。如何修复此问题 对于(int i=0;i<[计算机手计数];i++) { } 电脑手声明: @属性(保留)NSMutableArray*computerHand 电脑手人口Objective c 如何从NSMutableArray访问对象的属性,objective-c,properties,nsmutablearray,frame,sigabrt,Objective C,Properties,Nsmutablearray,Frame,Sigabrt,在我的程序中,我试图设置存储在NSMutableArray中的对象的属性“frame”。当我尝试设置对象的帧时,我的程序接收到信号“SIGABRT”,并显示消息“\uuu[NSCFNumber setFrame:]:发送到实例0x6a8d960的无法识别的选择器”。如何修复此问题 对于(int i=0;i
-(void) addCardToHand:(NSMutableArray *)hand
{
[hand addObject:[cards objectAtIndex:0]];
NSLog(@"%@", [[cards objectAtIndex:0]class]);
[cards removeObjectAtIndex:0];
}
注意-NSLog将“\uu 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]);
}
}
-(void)createDeck:(UIView*)视图
{
卡片=[[NSMutableArray alloc]initWithCapacity:52];
对于(int i=0;i而言,问题在于您没有从数组中获取正确的对象。如果您在从数组中获取CardView
后立即中断,并在控制台中打印描述,则它是一个字符串,而不是实际上的CardView
。您需要做两件事
确保只将CardView添加到阵列中。请仔细检查此项
在for循环中,可以执行此操作以确保仅在CardView上设置帧:
if([card isMemberOfClass:[CardView class]]) {
card.frame = CGRectMake(10+70*i, 340, 60, 85);
}
您仍然希望确保实际上只输入CardView,但这是一种调试方法。您正在尝试将frame属性设置为NSNumber instance,检查数组中是否有所有有效的对象,再多些代码就可以轻松解决您的问题。@Coller,我该怎么做?显示您创建的代码吃了computerHand
对象;我打赌它发布得太快了。不是这样,你能不能显示创建卡的代码并将其添加到computerHand
这里的问题是数组computerHand
中索引I
处的对象不是CardView对象。没有编译时检查数组访问方式如下。数组中的值是NSNumber,因此没有frame
属性。您可能应该查看将对象插入computerHand
数组中的代码(此处未包括该代码)。我怀疑您会发现您实际上没有将类型为CardView
的对象放入数组中。(因为不知何故有一个NSNumber进入了数组。)@ipmcc您是对的,数组中的对象是类型为NSNumber而不是CardView。我将不得不追查我犯此错误的位置。谢谢您的帮助:)
if([card isMemberOfClass:[CardView class]]) {
card.frame = CGRectMake(10+70*i, 340, 60, 85);
}