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获取完整代码