class間傳訊息

  • warning: Declaration of views_handler_argument::init(&$view, &$options) should be compatible with views_handler::init(&$view, $options) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_argument.inc on line 745.
  • warning: Declaration of views_handler_filter::options_validate(&$form, &$form_state) should be compatible with views_handler::options_validate($form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_filter.inc on line 585.
  • warning: Declaration of views_handler_filter::options_submit(&$form, &$form_state) should be compatible with views_handler::options_submit($form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_filter.inc on line 585.
  • warning: Declaration of views_handler_filter_boolean_operator::value_validate(&$form, &$form_state) should be compatible with views_handler_filter::value_validate($form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc on line 149.
  • warning: Declaration of views_plugin_style_default::options(&$options) should be compatible with views_object::options() in /home/xnvgu7/public_html/sites/all/modules/views/plugins/views_plugin_style_default.inc on line 25.
  • warning: Declaration of views_plugin_row::options_validate($form, &$form_state) should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/plugins/views_plugin_row.inc on line 135.
  • warning: Declaration of views_plugin_row::options_submit($form, &$form_state) should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/xnvgu7/public_html/sites/all/modules/views/plugins/views_plugin_row.inc on line 135.

class間傳訊息:2011年05月10日星期二

有aClass及bClass,假設AClass會BClass *myBClass = [[BClass alloc] init];因此,可用myBClass去call任何BClass內method因而達到AClass傳訊息給BClass的目的。但是,如何在BClass內傳訊息給AClass呢?

困難原因:BClass內沒有AClass這receiver。

解法:

Aclass.h

  1. @interface AClass{ NSString *stringInA; }
  2. @property (nonoatomic, copy) NSString *stringInA;
  3. @end

AClass.m

  1. #include "AClass.h"
  2. #include "BClass.h"
  3. @implemetation AClass
  4. @synthesize staringInA;
  5. -(void)loadView{ BClass *myBClass = [[BClass alloc] init:self]; }
  6. @end

Bclass.h

  1. @interface BClass{ id myADelegate; }
  2. -(id) init: (id) aDelegeate;
  3. @end

BClass.m

  1. #include "BClass.h"
  2. #include "AClass.h"
  3. @implemetation aClass
  4. -(id) init: (id) aDelegeate
  5. {
  6. id self = [super init];
  7. myADelegate = aDelegate; //將AClass的instance存起來
  8. myADelegate.stringInA = @"將String傳給AClass";
  9. }
  10. -(void)loadView{ .... }
  11. @end

以上程式的重點在於在AClass.m中第5行,BClass *myBClass = [[BClass alloc] init:self];將self傳給BClass,BClass.m的第7行可將此aDelegate存起來,也可在第8行使用它,總之,即可用此argument來reference AClass。