2013-07-15 161 views
0

嘿,第一次海報在這裏。 我一直試圖做一個iOS應用:如何做一個指向一個類的函數的指針

  • 一個viewcontrolloer一些函數/方法

  • 的指針這些功能一個新的類/方法,使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 
    

我將答案或在我可以考慮進一步至少關鍵字非常心存感激。

+1

沒有創造像'self.test = [[TestClass的頁頭]初始化]在TestClass中的一個實例;' –

+0

[地位norepro] – Kevin

+0

@picciano甚至還沒有接近。這是詢問關於將一個c函數指針存儲在objc類中,即詢問選擇器。 – Kevin

回答

0

問題是您正試圖調用一個NULL函數指針。在objective-c中,實例變量被初始化爲零(NULL)。所以變量test是零。訪問零指針的屬性並不是一個錯誤,但它什麼也不做。因此,test.point2f = downx;什麼都不做,test仍然是零。零指針的每個屬性也返回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 
} 
相關問題