我有这段代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic
NSLog(@"didSelectRowAtIndexPath");
//The hud will dispable all input on the view
HUD = [[MBProgressHUD alloc] initWithView:self.view];
// Add HUD to screen
[self.view addSubview:HUD];
// Regisete for HUD callbacks so we can remove it from the window at the right time
HUD.delegate = self;
HUD.labelText = @"Loading Events, Please Wait..";
int i = indexPath.row;
//Show the HUD while the provided method executes in a new thread
[HUD showWhileExecuting:@selector(loadData:) onTarget:self withObject:i animated:YES];
}
我收到了这个警告:
警告:传递'showWhileExecuting:onTarget:withObject:animated:'的参数3,使得整数指针没有强制转换
有人可以解释我在这里做错了什么吗?有人还可以简单地用Objective-C中的int来解释这种情况,来自Java我觉得奇怪的是它们使用起来很混乱。
答案 0 :(得分:3)
问题是showWhileExecuting:onTarget:withObject:animated:
将对象作为其第三个参数。为了解决这个问题,您可以使用NSNumber类
[NSNumber numberWithInt:i]
然后,您必须通过调用
来打开loadData:
方法中的参数
[argument intValue]
答案 1 :(得分:2)
该方法将对象作为第三个参数(withObject
),但您传递了int
。
答案 2 :(得分:2)
显然,您提供了一个整数(int i)而不是对象指针(id的类型)。这不安全。请改用NSNumber。
int i;
...
NSNumber * numberI = [NSNumber numberWithInt:i];
[HUD showWhileExecuting:@selector(loadData:) onTarget:self withObject:i animated:YES];
答案 3 :(得分:0)
以上所有答案都是“正确的”。即做一个好孩子并使用NSNumber来传递价值。
然而,......以下内容将起作用
“该死的,编译器,我比你聪明:” (将您的整数,完全不是有效对象,转换为id
)
[HUD showWhileExecuting:@selector(loadData:)
onTarget:self
withObject:(id)i
animated:YES];
我猜(你没说),你的加载数据方法看起来像这样:
- (void)loadData:(int)i { …
你将看到这样的代码,这是我提到它的唯一原因。 你应该熟悉它。 有人认为保存1个对象分配将使他们的代码有效;不要冒汗对象分配,并将其包装在NSNumber中,如上所示
大多数C编译器都会正确处理,但不能保证