我在Objective-C中編寫iPhone應用程序。我創建了一個類(Foo.m),我希望能夠在實例化它的控制器(MainViewController.m)中調用方法。我該怎麼做呢?請舉一個例子。謝謝!從一個類的控制器調用函數(objective-c)
回答
您可以這樣做的一種方法是在您的Foo類中創建一個引用其創建者的屬性。你不應該保留此引用,以避免循環引用,但代碼看起來像下面
-(void)yourControllerClassMethod{
Foo* f = [[Foo alloc] init];
[f setOwnder:self];
}
在這種情況下,你的Foo類有被設置在控制器類進行新的Foo實例的屬性叫老闆。現在,從您的Foo類,你可以調用控制器方法是這樣的:
所有的[[self owner] callSomeControllerMethod];
首先,我建議你閱讀一些設計模式的書籍。如果您的Foo
類是模型,那麼爲什麼您的模型會與控制器進行通信?如果Foo
是一個視圖,那麼爲什麼它會與您的控制器進行通信?
現在,雖然我懷疑您的應用程序在構建代碼的方式上存在設計問題,但有些方法可以實現此目的。
當MainViewController.m實例化Foo時,你可以通過self
並讓Foo保留對它的引用嗎?
或者,您應該在Foo中創建一個@protocol
,並且當MainViewController創建Foo時,讓MainViewController實現Foo的delegate
。
Foo實際上只是我創建的一個類,它是NSObject的一個子類。它不是模型或控制器。 – 2010-01-14 01:28:56
您應該查看Erik M. Buck和Donald A. Yacktman的Cocoa Design Patterns。這是一本非常出色的書,即使你不熟悉一般的設計模式,它也很容易理解。
這聽起來像你想要做的是其他人說什麼是一種稱爲授權的模式。要了解委派如何工作,請查看所有使用它的內置類。任何擁有delegate
屬性和UIBlablaDelegate
等協議的用戶都在使用委託,您可以對類執行相同的操作。
- 1. 從objectiveC調用javascript函數
- 2. codeignetor調用控制器中的另一個控制器函數
- 3. 從控制器Angular4調用jQuery函數
- 4. 從javascript函數調用控制器
- 5. 從控制器調用javascript函數
- 6. 從控制器調用JQuery函數
- 7. 從子控制器函數調用pushViewController
- 8. 使用另一個類的參數在視圖控制器中調用函數
- 9. 如何從angularjs中的另一個控制器調用一個函數?
- 10. 從另一個調用控制器
- 11. 從另一個調用函數的類
- 12. Angularjs,如何從另一個控制器調用控制器
- 13. ASP.Net Core從另一個控制器調用控制器
- 14. 從另一個控制器調用控制器
- 15. 從JavaFX控制器調用另一個類的方法?
- 16. 從另一個控制器調用另一個控制器的功能
- 17. 如何調用一個控制器的功能,從另一個控制器AngularJs
- 18. 在Yii的另一個控制器中調用函數
- 19. 如何調用一個函數控制器裏面Opencart的
- 20. 在angularjs中調用另一個控制器的函數
- 21. Symfony的2調用一個函數(temlate渲染)在控制器
- 22. 函數類函數沒有返回到控制器類調用函數
- 23. 從一個xib文件移動到一個視圖控制器在ObjectiveC
- 24. 不止一次從控制器調用Javascript函數(在Rails中)
- 25. 如何從控制器和從jquery到控制器調用jquery函數
- 26. 從另一個類調用函數,從另一個類
- 27. 從一個函數調用函數到另一個類PHP
- 28. 嘗試從另一個視圖控制器調用某個函數時出錯
- 29. AngularJS控制器是一個函數還是一個類?
- 30. CAKEPHP從另一個控制器調用一個控制器動作
這真的很複雜。聽起來好像他只需要首先閱讀和學習更多關於Objective-C和Cocoa的知識。 – 2010-01-14 01:23:15