我在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. 從Yii中的控制器調用另一個控制器中的函數
- 4. 如何從控制器的外部調用一個函數在控制器
- 5. AngularJS從鏈接調用另一個控制器中的函數
- 6. 如何從同一控制器的另一個函數調用Sails.js控制器的函數?
- 7. 從子控制器函數調用pushViewController
- 8. 從Rails控制器調用JavaScript函數
- 9. 從控制器調用JQuery函數
- 10. 從控制器調用javascript函數
- 11. 從javascript函數調用控制器
- 12. 從控制器Angular4調用jQuery函數
- 13. 在angularjs控制器中的一個函數內調用一個函數
- 14. 如何從angularjs中的另一個控制器調用一個函數?
- 15. 從另一個類函數調用一個類函數
- 16. 從另一個調用控制器
- 17. 有沒有辦法從一個mvc3控制器中從system.web.ui.page繼承的類中調用一個函數?
- 18. ASP.Net Core從另一個控制器調用控制器
- 19. Angularjs,如何從另一個控制器調用控制器
- 20. Spring MVC,從控制器內部調用另一個控制器
- 21. Yii從另一個控制器調用控制器功能
- 22. 從另一個控制器調用控制器
- 23. 從另一個調用函數的類
- 24. 從JavaFX控制器調用另一個類的方法?
- 25. CodeIgniter從同一控制器中的另一個函數調用變量
- 26. 如何從另一個控制器調用一個控制器的功能
- 27. 如何調用一個控制器的功能,從另一個控制器AngularJs
- 28. 從另一個控制器調用另一個控制器的功能
- 29. 在angularjs中調用另一個控制器的函數
- 30. 如何調用一個函數控制器裏面Opencart的
這真的很複雜。聽起來好像他只需要首先閱讀和學習更多關於Objective-C和Cocoa的知識。 – 2010-01-14 01:23:15