Objective c NSUILabel';s文本输出为空

Objective c NSUILabel';s文本输出为空,objective-c,uilabel,nslog,Objective C,Uilabel,Nslog,我有一个名为TimerViewController的自定义视图控制器,其子类名为FirstViewController和FourthViewController 我在FirstViewController的中声明了名为controller的FirstViewController的实例 在FourthViewController的viewDidLoad方法.m中,我有: controller=[self.storyboard实例化eviewcontrollerwhiteIdentifier:@“m

我有一个名为
TimerViewController
的自定义视图控制器,其子类名为
FirstViewController
FourthViewController

我在
FirstViewController
中声明了名为
controller
FirstViewController
的实例

FourthViewController
viewDidLoad
方法
.m
中,我有:

controller=[self.storyboard实例化eviewcontrollerwhiteIdentifier:@“mainController”];
在故事板中,我将视图控制器ID声明为
mainController
,并声明了一个自定义类
FourthViewController
。然后,在
FourthViewController
.m
中,我有:

controller.mainLab.text=[NSMutableString stringWithFormat:@“这是一个字符串”];
NSLog(@“%@”,controller.mainLab.text);
但是,这会输出
(null)


为什么会发生这种情况?

mainLab
必须为
nil
。因此,您的插座可能未连接到XIB



另外,将
stringWithFormat:
与非格式的字符串一起使用是浪费。

mainLab
必须为
nil
。因此,您的插座可能未连接到XIB



另一方面,将
stringWithFormat:
与非格式的字符串一起使用是浪费。

您忽略了告诉我们有关项目其余部分的信息,我只是不确定它是什么

我启动Xcode只是为了快速完成这个过程,而且过程很简单

将UI标签拖到XIB

控件从标签单击到.h

因为我做了测试

#import "SOViewController.h"

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mainLabel.text = @"This is my label";
    NSLog(@"%@", self.mainLabel.text);
}
我的.h看起来像这样:

#import <UIKit/UIKit.h>
@interface SOViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end
#导入
@接口SOViewController:UIViewController
@属性(弱,非原子)IBUILabel*mainLabel;
@结束

这是自定义类的一部分吗?还有别的事吗?如果它是一个普通的标签,那么使用上面提到的代码应该可以正常工作。

您忽略了告诉我们关于您项目其余部分的信息,我只是不确定它是什么

我启动Xcode只是为了快速完成这个过程,而且过程很简单

将UI标签拖到XIB

控件从标签单击到.h

因为我做了测试

#import "SOViewController.h"

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mainLabel.text = @"This is my label";
    NSLog(@"%@", self.mainLabel.text);
}
我的.h看起来像这样:

#import <UIKit/UIKit.h>
@interface SOViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end
#导入
@接口SOViewController:UIViewController
@属性(弱,非原子)IBUILabel*mainLabel;
@结束

这是自定义类的一部分吗?还有别的事吗?如果是普通标签,则使用上述代码应该可以正常工作。

看起来您的
mainLab
尚未创建。当对nil对象调用方法时,该方法会自动返回nil。在运行这行代码之前,请确保确实创建了标签

看起来您的
mainLab
尚未创建。当对nil对象调用方法时,该方法会自动返回nil。在运行这行代码之前,请确保确实创建了标签

实例化另一个控制器后,您无法立即访问该控制器的标签(或任何其他UI元素),因为其viewDidLoad方法尚未运行。如果要在另一个控制器中设置标签的文本,必须将文本传递给该控制器,并使其在viewDidLoad方法中设置标签上的文本。所以,和此相反:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];
您需要这样做:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLabText = @"This is a string";
其中mainLabText是您在FourthViewController中创建的字符串属性。然后在FourthViewController的viewDidLoad中填充标签:

self.mainLab.text = self.mainLabText;

在实例化另一个控制器后,您无法立即访问它的标签(或任何其他UI元素),因为它的viewDidLoad方法尚未运行。如果要在另一个控制器中设置标签的文本,必须将文本传递给该控制器,并使其在viewDidLoad方法中设置标签上的文本。所以,和此相反:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];
您需要这样做:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLabText = @"This is a string";
其中mainLabText是您在FourthViewController中创建的字符串属性。然后在FourthViewController的viewDidLoad中填充标签:

self.mainLab.text = self.mainLabText;

如果你登录mainLab会得到什么?什么是mainLab?这是一个出口吗?它和这个代码在同一个控制器中吗?它是一个IBOutlet。我正确地将其连接到XIB。它在同一个控制器中如果您登录mainLab会得到什么?什么是mainLab?这是一个出口吗?它和这个代码在同一个控制器中吗?它是一个IBOutlet。我正确地将其连接到XIB。它在同一个控制器中我将插座连接到XIB。还有其他想法吗?我确实把我的插座连接到我的XIB上了。还有其他想法吗?它是自定义类的一个子类。我声明了属性并在这个自定义类的.h和.m中合成了它。我试图简化这个问题,但我想我需要给出完整的代码。返回post获取完整的代码它是自定义类的子类。我声明了属性并在这个自定义类的.h和.m中合成了它。我试图简化这个问题,但我想我需要给出完整的代码。返回post获取完整代码