标签更新为空

时间:2014-08-30 10:17:27

标签: objective-c cocoa nsoutlineview

我的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

1 个答案:

答案 0 :(得分:1)

你有:

NSLog(@"label value is %@", _dateLabel.value);

因为它输出“null”,所以当value很可能为空时,您认为_dateLabel为“null”。

您正在创建instance对象,但随后调用更新UI对象的方法,该方法在您调用它时可能尚未从xib文件中取消归档。因此,虽然您的日期格式化程序正在创建一个字符串,但它正在尝试将其设置为nil对象。

您可以通过检查输出:

来自行查看
NSLog(@"label is %@", _dateLabel);

也可能会返回“null”。