【问题标题】:Use "self" in void () function [duplicate]在void()函数中使用“self”[重复]
【发布时间】:2013-11-18 12:28:00
【问题描述】:

我在 MyViewController.m 文件中有一个我无法修改的 API:

void my_Callback (void* context, xxxxxx::eventType::type eventtype, int code, const myconst)
{

  //do stuff

}

我需要调用这个函数:

-(void) update
{
  self.textbox.test =@"new text";
}

但是当我尝试这样做时

void my_Callback (void* context, xxxxxx::eventType::type eventtype, int code, const myconst)
  {        
      //do stuff
      [self update];        
  }

我收到错误,因为它无法重新识别“自我”。

我试过了:

ViewController *newview = [[Viewcontroller alloc]init];
        void my_Callback (void* context, xxxxxx::eventType::type eventtype, int code, const myconst)
        {

          //do stuff
          [newview update];

        }

它最终进入了我的函数“更新”,但没有设置新的文本。

如何更新我的文本?谢谢

【问题讨论】:

  • 您已将 self 作为参数传递。还要检查这个线程:stackoverflow.com/questions/1280017/…
  • 当您尝试创建新的视图控制器时,文本没有得到更新,因为您正在更新的 textView 是 self.textbox.text 并且您正在为新的视图控制器调用更新函数。关于你得到的无法识别“自我”错误,可能是因为它是一个静态方法。
  • "my_Callback" 是一个常规的 C 方法,与包含它的 .m 文件中的其他函数没有逻辑关联。如果您想要一个指向任何 Objective-C 对象(包括“self”)的指针,您必须将指针作为参数传递或以某种方式将其作为全局值访问。

标签: ios objective-c uiviewcontroller void self


【解决方案1】:

谁调用了这个回调?通常有一种方法可以放置一些“用户数据”。在您的情况下,它似乎是回调的 void *context 参数。

因此,在您定义回调的地方,您可能有机会指定上下文。在那里,您可以将实际的“自我”传递给它,以便稍后获取。

但要小心,因为这样做通常会导致迟早使用已发布的实例。

【讨论】:

  • 回调定义:typedef void my_Callback (void* context, xxxxxx::eventType::type eventtype, int code, const myconst)。同样,我无法修改它。这就是 Callback 的调用方式:MyManager->registerEvent ("My listener", &My_Callback, MyManager);
  • MyManager->registerEvent 方法的签名是什么?可能它的最后一个参数是上下文,在这种情况下,您可以轻松地从回调的第一个参数 context 中获取 self
  • 虚拟结果 registerEvent(const Stringname, My_Callback listener, void* context) =0 ;我应该如何修改这个?谢谢
  • 那你可能没问题。试着弄清楚你在my_Callback 函数中收到的context 是什么。可能是MyManager 对象。
【解决方案2】:

请检查文本框标签是否已初始化。 文本框标签可能未初始化。

【讨论】:

  • 由于他的回调是一个简单的 C 函数,而不是方法的一部分(意思是:在那个范围内没有 self 这样的东西),textbox 还没有关系。跨度>
猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2020-03-06
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多