2008-11-20 53 views
15

我正在爲GUI應用程序使用MVC體系結構。模型類有一些C函數。其中一個C函數調用了Objective-C類的一些方法。我使用該類的對象調用這些方法。奇怪的事情發生在xyz方法以前的方法被稱爲完美的,但是當xyz方法被調用時,該方法和它後面的方法沒有得到執行。 我沒有得到任何錯誤。所以無法弄清楚到底發生了什麼。 任何想法可能是什麼原因呢?無法從C函數調用Objective C方法

+0

你能發佈一些代碼?否則就不可能提供幫助。 – 2008-11-20 10:34:52

+0

我第二次請求。一些簡單的代碼將非常有幫助。例如。只是C函數的一些代碼顯示了你實際訪問obj-c對象的方式,以及如何調用它,這可能對你非常有幫助 – Mecki 2008-11-20 10:54:55

回答

1

你肯定可以在C函數上運行Obj-C對象的方法,所以在某些時候你的代碼可能會出錯。如果我不得不猜測,這聽起來像一個對象是零,當你不希望它是。通常情況下,您首先要在函數中設置斷點,以便找出問題中的對象的狀態。

55

正如Marc所指出的那樣,您可能使用了一個對在Objective-c範圍之外未初始化的OBJC對象的引用。

這裏的C代碼調用一個ObjC對象的方法工作示例:在XYZ之前該方法

#import <Cocoa/Cocoa.h> 

id refToSelf; 

@interface SomeClass: NSObject 
@end 

@implementation SomeClass 
- (void) doNothing 
{ 
     NSLog(@"Doing nothing"); 
} 
@end 

int otherCfunction() 
{ 
     [refToSelf doNothing]; 
} 


int main() 
{ 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    SomeClass * t = [[SomeClass alloc] init]; 
    refToSelf = t; 

    otherCfunction(); 

    [pool release]; 
} 
1

斷點,然後開始在調試器單步。它令人驚訝的是,通過單步執行調試器中的代碼可以發現多少錯誤。事實上,這實際上是一種推薦的防止錯誤的技術,可以讓您編寫任何新代碼時始終單步執行代碼。

我同意馬克,「該方法和它沒有得到執行後的方法」的經典原因是該對象引用是零,因爲[nil doAnything]什麼也不會做,並報告沒有錯誤。

0

有一個簡單的方法來做到這一點:

@implementation 
// Define a object 
ClassName *thisClass; 

,然後初始化自

thisClass = self; 

可以使用任何var和方法在C-方法