2010-02-13 64 views
0

Im新的Obj-C,我有一個類,其中有一個類的變量,並且我有一個函數不在需要調用函數的類中當第一個類調用該函數時,第一個變量的變量。那寫都錯了,但我不知道正確的話這樣:從另一個類調用obj-c類函數

Root.h:

@interface Root { 
    UITableView *tableview; 
} 
@property (nonatomic,retain) UITableView *tableview; 
@end 

我有一個函數(Root是一個delagate,所以它被調用,並調用另一個函數,而不是在任何類或任何東西:

void Search() 
{ 
    //here I need to call a function, I dont know how. If I was in Root.m, it would be 
    //[self.tableview reloadData]; 

但在這裏我不知道該怎麼稱呼它,香港專業教育學院嘗試通過搜索一個指向Root.m一個函數調用該函數:

-(void) update { 
    [self.tableview reloadData]; 
} 
-(void) anotherFunction { 
    Search(update); 

Search(self.update); 

等 但它總是錯誤的時候,我也試過路過一個指針(個體經營)搜索,並呼籲

[pointer.tableview reloadData]; 

,但是,當我運行它的錯誤:

unrecognized selector sent to instance 0x3detc 

我該怎麼做?

(對不起,如果這是非常混亂)

回答

0

因此,讓我得到這個直:你有一個類Root和類myRoot的一個實例。在課堂上,有兩個功能-update-anotherFunction。你也有一個C函數search()。在-anotherFunction中,您想要撥打search(),然後從root的原始實例回撥至-update

如果這是完全正確的,我們假設你通過調用[myRoot anotherFunction];來進入-anotherFunction。我們還會假設所有文件都在同一個文件中,或者所有文件都正確地爲#import ed或#include d。您需要將search()定義爲void search(id callback)。在-anotherFunction請致電search()這樣:search(self)。然後,在search()中,您可以撥打[callback update];從最初執行-anotherFunction的類實例調用-update

我認爲那會回答你的問題。請不要猶豫,要求澄清。

0

我不知道我理解你正確,但如果你想打電話從類的外部類中定義的函數,你只需要創建一個類的實例如果它是一個實例方法並將其用作接收方,或者如果它是一個類方法,則將該類本身用作接收方。換句話說,假設我想調用SomeClass的方法someFunction,它是SomeClass的一個實例方法。這是我需要做的:

SomeClass *someClass = [[SomeClass alloc] init]; 
[someClass someFunction]; 

如果它是一個類函數,我不需要實例化一個對象實例。我只是這樣做:

[SomeClass someFunction]; 
+0

是的。但是不會創建該類的另一個實例嗎?這不起作用,並給與傳遞類的指針相同的錯誤。 – zacaj 2010-02-13 21:58:42

+0

此外,您的搜索方法似乎用C代替Obj-C。儘管這當然是可以接受的,是否有任何理由不將其編碼爲Objective C? – ennuikiller 2010-02-13 22:07:49

+0

我不喜歡Obj-c,但主要是因爲搜索方法應該是跨平臺的,如果平臺不支持obj-c,我不想重寫它。無論如何,它在mm文件中聲明,否則它不會編譯。 – zacaj 2010-02-13 22:13:30