2010-01-14 58 views

回答

0

您可以這樣做的一種方法是在您的Foo類中創建一個引用其創建者的屬性。你不應該保留此引用,以避免循環引用,但代碼看起來像下面

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

在這種情況下,你的Foo類有被設置在控制器類進行新的Foo實例的屬性叫老闆。現在,從您的Foo類,你可以調用控制器方法是這樣的:

所有的
[[self owner] callSomeControllerMethod]; 
+0

這真的很複雜。聽起來好像他只需要首先閱讀和學習更多關於Objective-C和Cocoa的知識。 – 2010-01-14 01:23:15

0

首先,我建議你閱讀一些設計模式的書籍。如果您的Foo類是模型,那麼爲什麼您的模型會與控制器進行通信?如果Foo是一個視圖,那麼爲什麼它會與您的控制器進行通信?

現在,雖然我懷疑您的應用程序在構建代碼的方式上存在設計問題,但有些方法可以實現此目的。

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

或者,您應該在Foo中創建一個@protocol,並且當MainViewController創建Foo時,讓MainViewController實現Foo的delegate

+0

Foo實際上只是我創建的一個類,它是NSObject的一個子類。它不是模型或控制器。 – 2010-01-14 01:28:56

0

您應該查看Erik M. Buck和Donald A. Yacktman的Cocoa Design Patterns。這是一本非常出色的書,即使你不熟悉一般的設計模式,它也很容易理解。

這聽起來像你想要做的是其他人說什麼是一種稱爲授權的模式。要了解委派如何工作,請查看所有使用它的內置類。任何擁有delegate屬性和UIBlablaDelegate等協議的用戶都在使用委託,您可以對類執行相同的操作。

相關問題