我有以下代码:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Does not crash
//[self performSelector:@selector(dummyRectValue)];
// Does not crash
[self performSelector:@selector(dummyPoint)];
// Crash
[self performSelector:@selector(dummyRect)];
}
- (NSValue*) dummyRectValue
{
return [NSValue valueWithCGRect:CGRectMake(0.0f, 0.0f, 0.0f, 0.0f)];
}
- (CGRect) dummyRect
{
return CGRectMake(0.0f, 0.0f, 0.0f, 0.0f);
}
- (CGPoint) dummyPoint
{
return CGPointMake(0.0f, 0.0f);
}
@end
目前,调用[self performSelector:@selector(dummyRect)]
会导致崩溃。
任何帮助,了解我做错了什么?
提前致谢,
答案 0 :(得分:2)
perfomSelector是一个NSObject方法。您可以在Apple doc中找到它:
- (id)performSelector:(SEL)aSelector
你可以看到,它只返回对象(id),你正在尝试它返回一个C结构(CGRect)
你可以这样做:
[self dummyRect];
答案 1 :(得分:-1)
在objective-C中,您无法返回CGRect。所以你必须将CGRect转换为NSValue。 所以你得到崩溃报告。 这是Objective-C的一个基本限制 - 变量有时不能保存对象,有时也不能保持原始值。最好的解决方法是返回包含要返回的实际值的NSNumber或NSValue对象。
答案 2 :(得分:-1)
在objective-C中,您不能将CGRect作为参数发送,因此您需要将CGRect转换为NSValue。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Does not crash
//[self performSelector:@selector(dummyRectValue)];
// Does not crash
[self performSelector:@selector(dummyPoint)];
// Crash
[self performSelector:@selector(dummyRect)];
}
//Return CGRect as NSValue
- (NSValue *)dummyRect
{
return [NSValue valueWithCGRect:CGRectMake(0.0f, 0.0f, 0.0f, 0.0f)];
}