Ios can';t从自定义NSObject类设置UILabel文本

Ios can';t从自定义NSObject类设置UILabel文本,ios,objective-c,Ios,Objective C,这是我的viewController类,其中我的标签通过IBOutlet连接,我的viewController.h是 我的ViewController.m是 我的自定义类,我想从中设置ViewController标签文本,我的自定义类看起来像这样,我的customVC.h看起来像这样 - (id)initForVC:(ViewController *)refVC { self = [super init]; if (self) { [refVC.Label se

这是我的viewController类,其中我的标签通过IBOutlet连接,我的viewController.h是

我的ViewController.m是

我的自定义类,我想从中设置ViewController标签文本,我的自定义类看起来像这样,我的customVC.h看起来像这样

- (id)initForVC:(ViewController *)refVC
{
    self = [super init];
    if (self) {
        [refVC.Label setText:@"Hello World"];
    }
    return self;
}

不要在“
init
”方法中设置“
.label
”,而是在“
视图加载:
”方法中进行设置,否则“
视图将显示:
”方法

这是因为在视图控制器的“
init
”时间,标签和所有其他用户界面元素尚未从XIB或故事板文件加载


p、 目标C中的最佳实践是以小写字母开始所有变量和属性。因此,与其使用“
.Label
”,不如使用“
.Label
”,或者更好的方法,使用更具描述性的内容,例如“
.viewControlleriTleLabel

我可以查看您的CustomVC.h文件吗

我假设您的目的是CustomVC扩展ViewController类

所以有必要

@interface CustomVC : ViewController
在您的CustomVC.h中

然后在你的自定义VC.m中 应该是

-(id)init{
   if(self = [super init]){
       [self.Label setText:@"hello world"];
  }
  return self;
}

您不再需要分配viewController对象。

无需在customVC类中再次alloc-init视图控制器,每次alloc-init时,都会为该对象提供一个单独的引用,在本例中,这看起来像是为具有不同引用的视图控制器设置标签文本,而不是尝试在其中设置标签文本

我建议您将当前视图控制器的引用传递给init方法,如下所示

- (id)initForVC:(ViewController *)refVC
{
    self = [super init];
    if (self) {
        [refVC.Label setText:@"Hello World"];
    }
    return self;
}
只需将此函数添加到customVC的.m文件及其定义中

- (id)initForVC:(ViewController *)refVC;
在.h文件中

您的viewcontroller的
viewDidLoad
将更改为

- (void)viewDidLoad
{
    [super viewDidLoad];
    customVC *customVC = [[customVC alloc] initForVC:self];
}

它不会直接将文本设置为UILabel对象创建NSString类的属性,并将文本设置为该属性,然后将NSString属性指定给UILabel,而是可以工作

NSString *str = [NSString stringWithFormat: @"Sample..."];
FirstViewController *f = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
f.lbl = str; //lbl is the NSString property
[self.navigationController presentViewController:f animated:YES completion:nil];
然后将lbl指定给UILabel对象

lblText.text = lbl;

伙计们,我通过使用NSNotificationcenter解决了这个问题。

我的自定义clas不是UIViewcontroller类当然,您的customVC不是UIViewcontroller类,但是当您调用“
[viewCon.Label setText:@“hello world”;
”时,您的ViewController尚未加载。只有在加载viewCon序列图像板/XIB后,才需要设置标签,然后才能在其上设置标签。另外,为什么有一个循环alloc&init对?(customVC alloc的ViewController和ViewController alloc在其viewDidLoad中)。那么,如何检查是否加载了xib并设置标签的value@vivek这就是view Dod loadya的定义。我已经包含了我的customVC.h文件。很难从您的示例代码中看出您想要实现什么。无论如何,您确实不应该从自定义类设置标签——视图控制器应该负责自己的视图。如果视图控制器需要来自自定义类的信息,则该类应提供数据(示例中的字符串),并让控制器在viewDidLoad中设置自己的标签。你的代码还有一个严重的问题——你正在自定义类中创建一个新的ViewController实例,该实例的alloc init与屏幕上的实例不同。我无法alloc customVC*customVC=[[customVC alloc]initForVC:self];在我的viewcontroller ViewDidLoad中,我找不到您,只需在customVC.h中声明方法,并在customVC.m文件中添加该方法的定义,就像我在回答中所说的那样,应该可以