0

我一直在尝试使用以下方式制作 ios 应用程序:

  • 具有一些功能/方法的视图控制器

  • 一个带有指向这些函数/方法的指针的新类,以便 class1.point2f () 可以工作

    // testclass header
    @property void (*point2f)();
    
    
    // viewcontroller header        
    #import "testclass.h"
    
    @interface ViewController : UIViewController
    {
        testclass *test;
    }
    
    @property testclass *test;
    
    @end
    
    
    // viewcontroller implementation
    void downx() 
    {
        NSLog(@"hello");
    };
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        test.point2f = downx;
    
        test.point2f ();     // crashes only at this line
    

我会非常感谢答案或至少我可以进一步研究的关键字。

4

1 回答 1

0

问题是您试图调用 NULL 函数指针。在 Objective-C 中,实例变量被初始化为 nil (NULL)。所以变量test为零。访问 nil 指针的属性不是错误,但这不会做任何事情。因此,test.point2f = downx;什么都不做,test仍然为零。nil 指针的每个属性也返回 nil(0、NO 等)。所以test.point2f实际上是零。如此有效地你正在做的是

((void (*)())NULL) ();    // dereferencing a NULL pointer

在访问它的任何属性之前,您需要实例化一个testclass对象并将其分配给它。test

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.test = [[testclass alloc] init];
    test.point2f = downx;
    test.point2f();     // won't crash anymore

    // rest of your code
}
于 2013-07-15T20:00:28.113 回答