簡體   English   中英

從類中調用控制器中的函數(目標-c)

[英]calling function in a controller from a class (objective-c)

我正在用Objective-C編寫一個iPhone應用程序。 我創建了一個類(Foo.m),希望能夠在實例化該控制器的控制器(MainViewController.m)中調用該方法。 我該怎么做呢? 請提供一個例子。 謝謝!

一種實現方法是在Foo類中創建一個引用其創建者的屬性。 您不應保留此引用以避免循環引用,但是代碼可能類似於以下內容

-(void)yourControllerClassMethod{
    Foo* f = [[Foo alloc] init];
    [f setOwnder:self];
}

在這種情況下,您的Foo類具有一個名為owner的屬性,該屬性在Controller類創建新的Foo實例時設置。 現在,從Foo類中,您可以像下面這樣調用控制器方法:

[[self owner] callSomeControllerMethod];

首先,我建議您閱讀一些設計模式書籍。 如果您的Foo類是Model,那么為什么您的模型會與Controller通信? 如果Foo是View,那么為什么它會與您的控制器通信?

現在,盡管我懷疑您的應用在構造代碼的方式上存在設計問題,但仍有一些方法可以做到這一點。

當MainViewController.m實例化Foo時,您可以傳遞self並讓Foo保留對它的引用嗎?

另外,您應該在Foo中創建一個@protocol ,當MainViewController創建Foo時,讓MainViewController實現Foo的delegate

您可能應該查看Erik M. Buck和Donald A. Yacktman撰寫的《 可可設計模式》 這是一本非常出色的書,即使您對一般的設計模式還不熟悉,也可以理解。

聽起來您想要做的就是其他人說的話,這是一種稱為授權的模式。 若要查看委派的工作原理,請查看所有使用委派的內置類。 任何具有delegate屬性和協議(如UIBlablaDelegate都在使用委托,並且您可以對類進行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM