我的UI中没有正确更新标签的问题。我有一个Mac OS X应用程序,它使用大纲视图来切换视图。我想简单地在切换到(FirstViewController)的视图上的标签中向用户显示日期。当在新项目中单独实施时,我没有任何问题。但是当在视图发生更改的情况下实现时,标签的值不会更新,实际上控制台输出表明即使在之前设置之后_dateLabel也是(null)。有什么建议?我必须遗漏一些非常基本的东西!
控制台输出:
2014-08-30 19:54:22.719 OutlineView [10420:1613022] StringedText是2014年8月30日
2014-08-30 19:54:22.720 OutlineView [10420:1613022]标签值为(null)
我包含以下代码:
//
// FirstViewContorller.h
// OutlineView
#import <Cocoa/Cocoa.h>
@interface FirstViewContorller : NSViewController
@property (weak) IBOutlet NSTextField *dateLabel;
-(void)updateDateScreen;
@end
//
// FirstViewContorller.m
// OutlineView
#import "FirstViewContorller.h"
@implementation FirstViewContorller
@synthesize dateLabel = _dateLabel;
-(void)updateDateScreen{
//date calculation for main window
NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
NSString *stringedText = [formatter stringFromDate:now];
_dateLabel.stringValue = stringedText;
NSLog(@"StringedText is %@", stringedText);
NSLog(@"label value is %@", _dateLabel.value);
}
@end
//
// AppDelegate.m
// OutlineView
#import "AppDelegate.h"
#import "Book.h"
#import "FirstViewContorller.h"
@interface AppDelegate()
@property (weak) IBOutlet NSOutlineView *outlineView;
@property (weak) IBOutlet NSTreeController *booksController;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//other code here
//Call the update method in FirstViewController to load date label
FirstViewContorller *instance = [[FirstViewContorller alloc]init];
[instance updateDateScreen];
}
//further unrelated code
@end
答案 0 :(得分:1)
你有:
NSLog(@"label value is %@", _dateLabel.value);
因为它输出“null”,所以当value
很可能为空时,您认为_dateLabel
为“null”。
您正在创建instance
对象,但随后调用更新UI对象的方法,该方法在您调用它时可能尚未从xib文件中取消归档。因此,虽然您的日期格式化程序正在创建一个字符串,但它正在尝试将其设置为nil对象。
您可以通过检查输出:
来自行查看NSLog(@"label is %@", _dateLabel);
也可能会返回“null”。